2016-04-05 27 views
2

Wie überschreibt man die Plugin-Funktion in der functions.php des Theme-Ordners?So überschreiben Sie die Plugin-Funktion in theme's functions.php Wordpress

EDIT:
Unten ist mein Code:

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; 
    } 
} 

und wenn ich das Plugin aktivieren, ist es mir schwerwiegender Fehler ist zu geben:

Cannot redeclare userphoto_filter_get_avatar() .

Bitte erklären, was ich falsch mache .

+0

Schauen Sie sich [Pluggable_Functions] (https://codex.wordpress.org/Pluggable_Functions) an. –

+0

Wo haben Sie den oben genannten Code hinzugefügt? Teilen Sie den Code sowohl von Ihrer Plugin-Datei als auch von der theme functions.php-Datei. –

Antwort

5

Fügen Sie Ihren benutzerdefinierten Override-Code zu Must Use Plugin hinzu.

Pluggable functions in Plugins definiert sind, können nur unter Verwendung eines anderen Plugin oder ein verwenden müssen Plugin außer Kraft gesetzt werden. Das Hinzufügen des Codes zu einem anderen Plugin ist nicht zuverlässig. Daher ist es am besten, ein mu-plugin zu verwenden.

Beachten Sie, dass steckbare Funktionen, die im WordPress-Kern definiert sind, überschrieben werden können, indem Sie eine Funktion mit demselben Namen in unserem Plugin oder Theme verwenden.

Der zur functions.php-Datei des Themas hinzugefügte Code wird später ausgeführt, d. H. Nachdem der Plugin-Code ausgeführt wurde. Wenn Sie also unsere Überschreibfunktion in der Designdatei hinzufügen, wird der Fehler ausgelöst.

Grund:

Die Ausführungsreihenfolge der verschiedenen Wordpress Aktionen in der Plugin_API/Action_Reference angegeben. Wie wir von hier, der vereinfachte Ausführungsreihenfolge ist

  1. muplugins_loaded
  2. plugins_loaded
  3. after_setup_theme

Also, außer Kraft zu setzen Funktionalität definiert in dem zweiten Haken (dh im Plugin) sehen können, Wir müssen es in einem Hook neu definieren, der davor ausgeführt wird (dh in den Must Use Plugins).

+1

Das war super hilfreich. Vielen Dank. Einfache Lösung zum Überschreiben einer im Theme installierten Funktion, die in einem Plugin vorhanden war, anstelle von Theme-Dateien, die nicht einfach in der functions.php-Datei überschrieben werden können. –

+0

Froh, dass ich helfen könnte. –

Verwandte Themen