2016-12-04 20 views
2

私は私の親のテーマにここにあるPHPファイルに簡単な修正を作りたい:WordPressの子テーマのウィジェットをオーバーライドする方法は?

wp-content\themes\sailing\inc\widgets\gallery\tpl\base.php 

は、だから、私は子供のテーマで同じフォルダ構造を作成し、私は、このファイルに必要な修正をしました。このウィジェットを宣言するのに必要なすべてのPHPファイルもコピー/ペーストしました。

wp-content\themes\sailing\inc\widgets\widgets.php 
wp-content\themes\sailing\inc\widgets\gallery\gallery.php 

wp-content\themes\sailing-child\inc\widgets\widgets.php 
wp-content\themes\sailing-child\inc\widgets\gallery\gallery.php 

私はここで何が欠けていますか?

答えて

5

WordPressの子テーマはこの方法では動作しません。あなたの子供のテーマで同じパスを使って上書きできる唯一のファイルは、 "基本"ファイルです:index.php、page.php、style.css ...主にテンプレートファイルです。

子テーマでの機能またはクラスをオーバーライドする場合は、機能/クラス

しかし、それはあなたのテーマが構築されているかに依存しを複製

  1. 再宣言機能/クラス
  2. :あなたはそれを処理するためのいくつかの方法をしましたそれは "子テーマ"の準備ができている場合。あなたのウィジェットの問題を見てみましょう。あなたが親のテーマの中にあなたのウィジェットの宣言ファイルを開くと

    、あなたのようなものが表示されます:

    class Widget_Name extends WP_Widget { 
    ... 
    CODE OF THE WIDGET 
    ... 
    

    参照:https://codex.wordpress.org/Widgets_API

    理想的なケースでは、最初に上記の行が表示されないですしかし:

    意味
    if(!class_exists('Widget_Name')) { 
        class Widget_Name extends WP_Widget { 
        ... 
        CODE OF THE WIDGET 
        ... 
    

    、あなたは自分のファイルを過ぎて/コピーすることができ、それがうまく動作するでしょう、あなたは親1を上書きするウィジェットとエラーがスローされません親ウィジェットは実行されないためです。これは「子どものテーマを準備する」テーマです。関数(if(!function_exists('function_name'))と同じことに注意してください。

    ファイルchild-theme/functions.phpファイルから呼び出すことを忘れないでください。デフォルトでは呼び出されません。

    同様:

    require_once('path/to/your/widget_class.php'); 
    

    その他の方法で、あなたがでclass_existsコールを持っていない場合は、require_onceをして、それを呼び出し、単にファイルを複製することです。同じクラスの2倍を定義しているときにエラーが表示されるはずです。 PHPは、致命的なエラーを起こさせません。

    ちょうど名前を変更:どこか

    class Widget_Name2 extends WP_Widget { 
    

    そして、あなたのファイルの(最後にほとんどの時間)は、register_widget(を探し、クラス名編集:

    register_widget('Widget_Name2'); 
    

    最も便利ではありませんあなたは2倍の同じウィジェットを持っていますが、それはうまくいきます。

+0

ありがとうございます@ 2Fwebdあなたの答えです。私は今この仕事に取り組んでいます。あなたの答えは私を助けました。私はまた、あなたが "子テーマの準備ができていない"テーマを持っていて、あなたのウィジェットクラスの名前を変更する以外に**あなたのテーマを複製する**を使う場合には、あなたのウィジェットの一意の 'id_base'を' parent :: __ construct () 'を押してウィジェットをウィジェットリストに表示させます。 – Edward

関連する問題