2015-07-15 5 views
7

Ich habe ein WP-Plugin erstellt, das die Abfragezeichenfolge verwendet, um die Seitendaten basierend auf den vom Besucher ausgewählten Daten abzurufen. Offensichtlich "simuliert" dies zusätzliche Seiten, aber der Seitentitel ändert sich nicht gegenüber dem in WP Admin festgelegten Titel.Wp_title einstellen, um title tag vom plugin zu ändern?

Ich habe versucht, in wp_title zu haken, um das title tag on fly zu ändern, kann aber dieses nicht funktionieren.

Die folgende Funktion funktioniert:

public function custom_title($title) { 
    return 'new title'; 
} 
add_filter('wp_title', array($this, 'custom_title'), 20); 
// changes <title> to 'new title' 

Sobald ich versuche, eine Variable zu übergeben, scheitert es.

public function custom_title($title, $new_title) { 
    return $new_title; 
} 

Wordpress beklagt er das zweite Argument fehlt, ich denke, das macht Sinn, da die Funktion bei Laden der Seite aufgerufen wird ... Ich hatte gehofft, dass ich so etwas wie $this->custom_title($title, 'new title); in meinem Plugin tun könnte, aber es sieht nicht wie wird das möglich sein?

Ich habe dies hier gepostet, weil ich denke, es ist eine allgemeine PHP-Klassenproblem.

Kann ich eine zurückgegebene Variable, z. Ich mag die ‚Titel‘ Spalte aus einer Abfrage in einer anderen Funktion wie $query->title

zurückzukehren Wenn die Funktion läuft es Daten aus der Datenbank

public function view_content() 
{ 
    $query = $this->db->get_row('SELECT title FROM ...'); 
    $query->title; 
} 

kehrt jetzt brauche ich query- $> Titel eingestellt wird als der Seitentitel.

public function custom_title() 
{ 
    if($query->title) 
    { 
    $new_title = $query->title; 
    } 
} 
+0

'view_content()' nicht wirklich 'return' alles ... – rnevius

+0

In meinem ganzen Code, den ich in der Funktion arbeite, was ich Sie müssen einen Weg finden, um es an eine andere Funktion zu übergeben. – Goodbytes

Antwort

6

Es sieht so aus, als hätten Sie möglicherweise falsch verstanden, wie der Filtermechanismus funktioniert. A filter ist eine Funktion WordPress ruft mit bestimmten Parametern zu einer bestimmten Zeit auf und ruft das Ergebnis ab. Hier ist eine anständige Einführung in Wordpress Filter: http://dev.themeblvd.com/tutorial/filters/

Sie können auch die Dokumentationsseite für die wp_title Filter insbesondere prüfen wollen, so würden Sie verstehen, welche Argumente Ihre Funktion sollte erwarten: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Der Code, der Was Sie möchten, würde in etwa so aussehen:

public function __construct() { 
    //... 
    add_filter('wp_title', array($this, 'custom_title'), 20); 
} 

public function view_content() { 

    $query = $this->db->get_row('SELECT title FROM ...'); 
    $this->page_title = $query->title; 
} 

public function custom_title($title) { 

    if ($this->page_title) { 
     return $this->page_title; 
    } 

    return $title; 
} 
0

Wordpress beschwert sich über den zweiten Parameter, weil ich die Funktion übernehmen in einigen Stellen verwendet wird, wo die Funktion einfach mit 1 Paramter aufgerufen wird, so wie es jetzt ist.

Ich gehe davon aus, dass Sie der Funktion mehr Logik hinzufügen, aber auf diese Weise ist der zweite Parameter "definiert". Das ist nicht wirklich 'ordentlich' Code übrigens.

Für Ihre zweite Frage; Ja, Sie können natürlich etwas in einem Objekt speichern. Es ist nur wichtig, wo Sie dies tun, um zu sehen, ob es durch einen anderen Teil Ihres Codes zugänglich ist.

+0

Der Objektteil ist das Bit, mit dem ich zu kämpfen habe, ich weiß nicht, wie ich es an die Funktion weiterleiten soll, die den Titel setzt. – Goodbytes

3

Aktion und Filter Hooks können Sie etwas von Wordpress an einem bestimmten Punkt der Programmausführung erzeugt ändern. Diese benutzerdefinierten Änderungen werden in einer Funktion vorgenommen, die an einen bestimmten Hook angehängt ist.

Parameter, die an eine angehängte Funktion übergeben werden, werden ursprünglich von Wordpress generiert, der erste Parameter ist ein Wert, der geändert und zurückgegeben werden soll, im Fall von the_title hook ist dies der Titel der Seite.

Da derselbe Filter mehrmals verwendet werden kann, kann der Wert in anderen Funktionen geändert werden, wenn die genaue Funktion der Funktion abhängig von der festgelegten Priorität und der Reihenfolge ist, in der sie zum Filter hinzugefügt werden. Der Unterschied zwischen Filtern und Aktionen besteht darin, dass Sie im ersten Fall einen Wert (geändert oder ursprünglich) zurückgeben müssen, während die Aktionen eine Art von ausgelösten Ereignissen sind, bei denen Sie beispielsweise etwas drucken können. Natürlich können Sie auch eigene benutzerdefinierte Aktionen und Filter definieren und auslösen.

Filter kann jederzeit hinzugefügt werden, bevor es angewendet wird, und Funktion süchtig kann in Form von anonymen Funktion wie im folgenden Beispiel sein.

public function view_content() 
    { 
     $query = $this->db->get_row('SELECT title FROM ...'); 

     add_filter('wp_title', function($title) use ($query) { 
      return $query->title; 
     }, 20); 
    } 

Oder Sie können den Wert als Objekteigenschaft speichern und später verwenden.

public function view_content() 
    { 
     $query = $this->db->get_row('SELECT title FROM ...');  
     $this->title = $query->title; 

     add_filter('wp_title', array($this, 'custom_title'), 20); 
    } 

    public function custom_title($title) 
    { 
     return $this->title; 
    } 

WP Plugin API
PHP Anonymous functions
PHP Class properties

Verwandte Themen