WordPressテーマSANGOの質問

「Cannot redeclare…」というエラーが表示される

アバター
tomoトモ

何度も誠に申し訳ございません。

現在、sangoテーマの英語化を行っているのですが、
著者ページ並びにアーカイブページのtitle 変更が上手くいかず、質問させていただきます。

親テーマにある該当する php内の function を、子テーマの functions.php にコピーペーストし編集してアップすると、Cannot redeclare と出てしまいます。

こちらの変更はどうすればよろしいでしょうか。

ご教授頂けますと、大変助かります。

SANGOのショートコード一覧
SANGOのショートコード一覧
コメントへの回答
サルワカくん
サルワカくん
2018/11/19

なるほど。add_filterで登録している関数については、remove_filterで一度解除したうえで、別関数名で再度登録することで変更が可能となります。
例えば、
【コード修正済み。こちらで動くかと思います】

function sng_document_title_parts($title_part)
{
    if (is_author()) {
        $title_part['title'] .= 'の書いた記事';
    } elseif (is_archive()) {
        $title_part['title'] = '「' . $title_part['title'] . '」の記事一覧';
    }
    return $title_part;
}
//〜略〜
add_filter('document_title_parts', 'sng_document_title_parts');

を上書きしたい場合、

function remove_parent_sng_document_title_parts(){
    remove_filter('document_title_parts', 'sng_document_title_parts',10);//解除
}
add_action('after_setup_theme','remove_parent_sng_document_title_parts');
add_filter('document_title_parts', 'my_document_title_parts');//再登録。右側の'〜'が新しい関数名
function my_document_title_parts($title_part)
{
    if (is_author()) {
        $title_part['title'] = 'Written by '.$title_part['title'];
    } elseif (is_archive()) {
        $title_part['title'] = 'Category - '.$title_part['title']
    }
    return $title_part;
}
アバター
tomoトモ
2018/11/20

サルワカくん様

ご返信のほど、誠にありがとうございます!
結果を申し上げると、できました!ありがとうございます!

ただ、少し変更をいたしました。

remove_filter を子テーマのfunctions.php に設定しても、子テーマの方が先に読み込まれるようで、またしても Cannot redeclare がでました。

子テーマ functions.php に、親テーマ内の document_title_parts をremoveするための funciton を作成して、
add_action(‘after_setup_theme’,’関数’)で、親テーマ読み込み後、実行いたしました。

また、sng_document_title_parts の優先順位が、デフォルトの 10 だったため
999 だと remove されないようでした。
remove_filter 内の優先順位を、10に変更すると、書き換えることができました!

ありがとうございます!

(私の拙い英語化、アウトプットして、ブログにしてもいいでしょうか・・・)

サルワカくん
サルワカくん
2018/11/20

問題があったようで、失礼しました。
うまくいったようで安心しました。
また、丁寧な情報提供ありがとうございます。
もちろんブログにして頂いて構いません。
よろしくお願いします。