2016-04-05 38 views
2

テーマフォルダのfunctions.php内のプラグイン関数をオーバーライドする方法は?テーマのfunctions.phpのプラグイン関数をオーバーライドする方法Wordpress

EDIT:以下
私のコードです:

if(!function_exists('userphoto_filter_get_avatar')){ 
    function userphoto_filter_get_avatar($avatar, $id_or_email, $size, $default){ 
     global $userphoto_using_avatar_fallback, $wpdb, $userphoto_prevent_override_avatar; 
     if($userphoto_using_avatar_fallback) 
      return $avatar; 

     if(is_object($id_or_email)){ 
      if($id_or_email->ID) 
       $id_or_email = $id_or_email->ID; 
      //Comment 
      else if($id_or_email->user_id) 
       $id_or_email = $id_or_email->user_id; 
      else if($id_or_email->comment_author_email) 
       $id_or_email = $id_or_email->comment_author_email; 
     } 

     if(is_numeric($id_or_email)) 
      $userid = (int)$id_or_email; 
     else if(is_string($id_or_email)) 
      $userid = (int)$wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_email = '" . mysql_escape_string($id_or_email) . "'"); 

     if(!$userid) 
      return $avatar; 

     //Figure out which one is closest to the size that we have for the full or the thumbnail 
     $full_dimension = get_option('userphoto_maximum_dimension'); 
     $small_dimension = get_option('userphoto_thumb_dimension'); 
     $userphoto_prevent_override_avatar = true; 
     $img = userphoto__get_userphoto($userid, (abs($full_dimension - $size) < abs($small_dimension - $size)) ? USERPHOTO_FULL_SIZE : USERPHOTO_THUMBNAIL_SIZE, '', '', array(), ''); 
     $userphoto_prevent_override_avatar = false; 
     if($img) 
      return $img; 

     return $avatar; 
    } 
} 

と私はプラグインをアクティブにしたとき、それは私に致命的なエラーを与えている:

Cannot redeclare userphoto_filter_get_avatar() .

私が間違っているのかを説明してください。

+0

[Pluggable_Functions](https://codex.wordpress.org/Pluggable_Functions)をご覧ください。 –

+0

上記のコードをどこに追加しましたか?プラグインファイルとテーマfunctions.phpファイルの両方からコードを共有します。 –

答えて

5

カスタムオーバーライドコードをMust Use Pluginに追加します。プラグインで定義された

Pluggable functions別のプラグインを使用することによってのみを上書きすることができますかは、プラグイン使用する必要があります。別のプラグインにコードを追加することは信頼できません。ですから、mu-pluginを使うのが最善です。

WordPressコアで定義されているプラ​​グイン可能な関数は、プラグインまたはテーマで同じ名前の関数を使用することでオーバーライドできます。

テーマのfunctions.phpファイルに追加されたコードは、プラグインコードが実行された後、つまり後で実行されます。したがって、テーマファイルにオーバーライト機能を追加すると、cannot redeclareエラーが発生します。

理由:

様々なワードプレスのアクションの実行順序をPlugin_API/Action_Referenceに指定されています。私たちはここから見ることができるように、単純化された実行順序は、(プラグインですなわち)は、第2のフックで定義された機能を無効にするために、そう

  1. muplugins_loaded
  2. plugins_loaded
  3. after_setup_theme

あり、その前に実行されるフック(つまり、プラグインを使用する必要があるプラグイン)で再定義する必要があります。

+1

これは非常に役に立ちました。ありがとう。テーマファイルではなく、プラグインに存在していたテーマインストール関数をオーバーライドするための簡単な修正は、functions.phpファイルで簡単にオーバーライドされません。 –

+0

うれしい私は助けになることができます。 –

関連する問題