wp_title festlegen, um den Titel-Tag vom Plugin zu ändern?

Lesezeit: 4 Minuten

Benutzer-Avatar
Goodbytes

Ich habe ein WP-Plugin erstellt, das die Abfragezeichenfolge verwendet, um Seitendaten basierend auf der Auswahl des Besuchers abzurufen. Offensichtlich „simuliert“ dies zusätzliche Seiten, aber der Seitentitel ändert sich nicht von dem in WP Admin festgelegten Titel.

Ich habe versucht, mich einzuklinken wp_title um den Titel-Tag on-fly zu ändern, kann diesen aber nicht zum Laufen bringen.

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, ihm eine Variable zu übergeben, schlägt es fehl.

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

WordPress beschwert sich, dass das zweite Argument fehlt, ich denke, das macht Sinn, da die Funktion beim Laden der Seite aufgerufen wird … Ich hatte gehofft, ich könnte so etwas tun $this->custom_title($title, 'new title); in meinem Plugin, aber es sieht nicht so aus, als wäre das möglich?

Ich habe dies hier gepostet, weil ich denke, dass es sich um ein allgemeines PHP-Klassenproblem handelt.

Kann ich eine zurückgegebene Variable globalisieren, z. B. möchte ich die Spalte „Titel“ aus einer Abfrage in einer anderen Funktion wie z $query->title

Wenn die Funktion ausgeführt wird, gibt sie Daten aus der Datenbank zurück

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

Ich brauche jetzt $query->title als Seitentitel.

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

  • view_content() eigentlich nicht return irgendetwas…

    – rnevius

    22. Juli 2015 um 13:51 Uhr

  • In meinem gesamten Code arbeite ich innerhalb der Funktion, was ich tun muss, ist einen Weg zu finden, ihn an eine andere Funktion zu übergeben.

    – Goodbytes

    22. Juli 2015 um 14:38 Uhr

Benutzer-Avatar
einbetten

Es sieht so aus, als hätten Sie die Funktionsweise des Filtermechanismus missverstanden. EIN filter ist eine Funktion, die WordPress mit bestimmten Parametern zu einem bestimmten Zeitpunkt aufruft und das Ergebnis abruft. Hier ist eine anständige Einführung in WordPress-Filter: http://dev.themeblvd.com/tutorial/filters/

Vielleicht möchten Sie auch die Dokumentationsseite für die wp_title filtern, damit Sie verstehen, welche Argumente Ihre Funktion erwarten sollte: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Der Code, der das tut, was Sie wollen, würde ungefähr 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;
}

Aktions- und Filter-Hooks ermöglichen es Ihnen, etwas zu ändern, das von WordPress an einem bestimmten Punkt der Programmausführung generiert wurde. Diese benutzerdefinierten Änderungen werden innerhalb 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 ggf. zurückgegeben werden muss the_title Haken Sie es ist der Titel der Seite.

Da derselbe Filter mehrmals verwendet werden kann, kann dieser Wert in anderen angehängten Funktionen geändert werden. Wann genau Ihre Funktion an der Reihe ist, hängt von der definierten Priorität und der Reihenfolge ab, in der sie dem Filter hinzugefügt werden.

Der Unterschied zwischen Filtern und Aktionen besteht darin, dass Sie im ersten Fall einen Wert (modifiziert oder original) zurückgeben müssen, während die Aktionen eine Art ausgelöste Ereignisse sind, bei denen Sie beispielsweise etwas drucken können. Natürlich können Sie auch Ihre eigenen benutzerdefinierten Aktionen und Filter definieren und auslösen.

Ein Filter kann jederzeit hinzugefügt werden, bevor er angewendet wird, und ein Funktions-Hook kann in Form einer anonymen Funktion vorliegen, wie im Beispiel unten.

    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
Anonyme PHP-Funktionen
Eigenschaften der PHP-Klasse

WordPress beschwert sich über den 2. Parameter, weil ich annehme, dass die Funktion an einigen Stellen verwendet wird, wo die Funktion einfach mit 1 Parameter aufgerufen wird, so wie es jetzt ist.

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

Ich nehme an, Sie fügen der Funktion mehr Logik hinzu, aber auf diese Weise wird der 2. Parameter “definiert”. Dies ist übrigens kein wirklich “ordentlicher” Code.

Zu Ihrer zweiten Frage; Ja, Sie können offensichtlich etwas in einem Objekt speichern. Es ist nur wichtig, wo Sie dies tun, um zu sehen, ob ein anderer Teil Ihres Codes darauf zugreifen kann.

  • Der Objektteil ist das Bit, mit dem ich zu kämpfen habe. Ich bin mir nicht sicher, wie ich ihn an die Funktion übergeben soll, die den Titel festlegt.

    – Goodbytes

    22. Juli 2015 um 13:00 Uhr

1382060cookie-checkwp_title festlegen, um den Titel-Tag vom Plugin zu ändern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy