2016-10-19 6 views
1

私のテーマには、たくさんの機能を持つfunction-template.phpファイルがあります。それらの1つは、サイトのカテゴリの説明をエコーし​​ます。テーマのオーバーライド

function woocommerce_taxonomy_archive_description() { 
if (is_tax(array('product_cat', 'product_tag')) && get_query_var('paged') == 0) { 
    global $wp_query; 

    $cat   = $wp_query->get_queried_object(); 
    $thumbnail_id = get_woocommerce_term_meta($cat->term_id, 'thumbnail_id', true); 
    $image  = wp_get_attachment_image_src($thumbnail_id, 'full'); 

    $description = apply_filters('the_content', term_description()); 

    if ($image && yit_get_option('shop-category-image') == 1) { 
     echo '<div class="term-header-image"><img src="' . $image[0] . '" width="' . $image[1] . '" height="' . $image[1] . '" alt="' . $cat->name . '" /></div>'; 
    } 

    if ($description) { 
     echo '<div class="term-description">' . $description . '</div>'; 
    } 
} 
} 

代わりに別の変数をエコーする必要があります。既存の関数を "上書き"する方法はありますか?

私はmu-pluginsなどでちょっとしたことをしてきましたが、成功しませんでした。 カスタム関数ファイルに同じ関数を追加すると、常にFatal error: Cannot redeclare woocommerce_taxonomy_archive_description() (previously declared inエラーが発生します。

+2

子どものテーマと呼ばれるもの – maxpovver

答えて

3

はい、これは子テーマからオーバーライドできます。子テーマのfunctions.phpファイルから関数をオーバーライドすることができます。

は、子テーマの詳細https://codex.wordpress.org/Child_Themes

WordPressの負荷最初にして、子テーマ親テーマを参照してください。したがって、あなたの子テーマに同じ名前の関数を作成した場合、! function_existsのif条件はfalseになります。したがって、この関数は宣言されません。

プラグインからオーバーライドする場合は、以前の実行時に関数を宣言する必要があります。 initフックで宣言してみてください。

add_action('init', 'theme_func_override', 5); 
    function theme_func_override(){ 
     function override_func(){ 
      //code goes here 
     } 
    } 

更新

機能があれば条件内function_exists()チェックと宣言されていないなら、あなたはそれをオーバーライドすることはできません!

+0

申し訳ありませんが、私は子供のテーマを使用していますが、私は何かを編集する必要なく、いくつかの機能でいくつかのサイトにインストールできるプラグインを開発したいファイル、子供のテーマファイルまで。私もそれが可能かどうかはわかりません:-) – affiliater

+0

更新された答えを参照してください。 –

+0

ああ、私はとても愚か/疲れている!!私は私の質問に間違った機能を提供した。私は正しいコードを更新しました。私は本当にそれのために申し訳ありません!あなたのコードはまだ仕事をしますか?私は "//コードはここに行く!"私はまだ学んで:)感謝の友人! – affiliater

関連する問題