add_filter(‘wp_title’) ersetzt mein Titel-Tag nicht (WordPress-Plugin)

Lesezeit: 5 Minuten

Ich versuche, den Titel meiner Detailseite in den Namen des Autos zu ändern. Ich habe ein Plugin erstellt, das die Detailseite mit den Fahrzeuginformationen füllt. Aber jetzt kann ich den add_filter(‘wp_title’) nicht in meinem Plugin zum Laufen bringen.

Hier ist der Code, den ich versucht habe:

function init() {
    hooks();
}
add_action('wp', 'init');

function hooks() {
    if(get_query_var('car_id') != "") {
        add_filter('wp_title', 'addTitle', 100);
        add_action('wp_head', 'fillHead');
    }
    add_shortcode('showCar', 'showCar');
}

function addTitle() {
    $api_url_klant = API_URL . '/gettitle/' . get_option("ac") . "https://stackoverflow.com/" . get_query_var('car_id');
    $title = getJSON($api_url_klant);
    return $title['merk'] . " " . $title['model'] . " - " . $title['bedrijf'];
}

Die Funktion addTitle() funktioniert einwandfrei. Es gibt den richtigen Namen zurück. Auch die add_action(‘wp_head’) funktioniert ebenfalls. Ich kann nur den wp_title-Filter nicht dazu bringen, nicht zu funktionieren.

Führe ich diesen Filter im falschen Moment aus oder was mache ich falsch?

Wenn jemand anderes damit Probleme hat, kann es am Yoast-Plugin liegen. Verwenden:

add_filter( 'pre_get_document_title', function( $title ){
    // Make any changes here
    return $title;
}, 999, 1 );

  • Um die Titelfilter von Yoast zu umgehen, bleiben aber die Vorteile erhalten document_title_partskönnen wir auch einen leeren String in zurückgeben wpseo_title Filter: add_filter('wpseo_title', '__return_empty_string'); Das scheint Yoast dazu zu bringen, auf den nativen WordPress-Titel zurückzugreifen.

    – Jömaller

    14. Februar 2017 um 20:39 Uhr

Benutzeravatar von Daniel C
Daniel C

Ich kann aus dem von Ihnen bereitgestellten Code nicht erkennen, aber verwenden Sie:

<title><?php wp_title(); ?></title>

in deiner <head>unter header.php?

AKTUALISIEREN

Anscheinend wurde ab 4.4 eine Änderung an der Art und Weise vorgenommen, wie Titel behandelt werden. Hier ist ein Link, der erklärt, wie man den neuen Code verwendet:

https://www.developersq.com/change-page-post-title-wordpress-4-4/

/*
 * Override default post/page title - example
 * @param array $title {
 *     The document title parts.
 *
 *     @type string $title   Title of the viewed page.
 *     @type string $page    Optional. Page number if paginated.
 *     @type string $tagline Optional. Site description when on home page.
 *     @type string $site    Optional. Site title when not on home page.
 * }
 *     @since WordPress 4.4
 *     @website: www.developersq.com
 *     @author: Aakash Dodiya
*/
add_filter('document_title_parts', 'dq_override_post_title', 10);
function dq_override_post_title($title){
   // change title for singular blog post
    if( is_singular( 'post' ) ){ 
        // change title parts here
        $title['title'] = 'EXAMPLE'; 
    $title['page'] = '2'; // optional
    $title['tagline'] = 'Home Of Genesis Themes'; // optional
        $title['site'] = 'DevelopersQ'; //optional
    }

    return $title; 
}

  • Ich glaube schon. Das ist was im Standard-Wordpress-Theme, richtig? Da es sich um ein Plugin handelt, sollte jede Art von Titel ersetzt werden

    – Wouter den Ouden

    18. März 2016 um 15:28 Uhr


  • Es scheint in vierundzwanzig zu sein, aber ich sehe es nicht in fünfundzwanzig oder sechzehn. Ich verwende nie Standard-WP-Designs, also bin ich mir nicht sicher … aber ich habe Dutzende Male ähnlichen Code wie Sie verwendet. Ich stelle immer sicher, dass wp_title() manuell aufgerufen wird … Fügen Sie es hinzu und sehen Sie, ob sich die Dinge ändern.

    – Daniel C

    18. März 2016 um 15:31 Uhr

  • Es sollte innerhalb des Plugins funktionieren, da es auf vielen Websites verwendet wird. Ich möchte also nichts am Thema ändern

    – Wouter den Ouden

    18. März 2016 um 15:32 Uhr

  • Meine Antwort wurde aktualisiert, um die neue WordPress-Titelmethode widerzuspiegeln.

    – Daniel C

    18. März 2016 um 15:47 Uhr

  • Für alle anderen, die hierher kommen, nachdem sie versucht haben, dies zu ändern, beachten Sie, dass der Slogan (Site-Beschreibung) lautet nicht geben Sie standardmäßig den Titel ein. Ich habe es leicht mit dieser Antwort und Einstellung bekommen $title['tagline'] = get_bloginfo('description');.

    – Stefan Samuel

    10. Mai 2019 um 17:21 Uhr

Benutzeravatar von snnsnn
snnsnn

Ich habe diese Antwort auf eine andere Frage gepostet, aber da sie relevant und aktueller ist, dachte ich, dass sie nützlich sein könnte.

Wie der Dokumenttitel generiert wird, hat sich seit WordPress v4.4.0 geändert. Jetzt wp_get_document_title bestimmt, wie der Titel generiert wird:

/**
 * Displays title tag with content.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Improved title output replaced `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }

    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

Hier ist der Code von v5.4.2. Hier sind die Filter, die Sie verwenden können, um den Titel-Tag zu manipulieren:

function wp_get_document_title() {
    /**
    * Filters the document title before it is generated.
    *
    * Passing a non-empty value will short-circuit wp_get_document_title(),
    * returning that value instead.
    *
    * @since 4.4.0
    *
    * @param string $title The document title. Default empty string.
    */
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- snipped ---
    /**
    * Filters the separator for the document title.
    *
    * @since 4.4.0
    *
    * @param string $sep Document title separator. Default '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filters the parts of the document title.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     The document title parts.
    *
    *     @type string $title   Title of the viewed page.
    *     @type string $page    Optional. Page number if paginated.
    *     @type string $tagline Optional. Site description when on home page.
    *     @type string $site    Optional. Site title when not on home page.
    * }
    */
    $title = apply_filters( 'document_title_parts', $title );
    // --- snipped ---
    return $title;
}

Hier sind also zwei Möglichkeiten, wie Sie dies tun können.

Zuerst verwendet man pre_get_document_title Filter, der die Titelgenerierung kurzschließt und daher performanter ist, wenn Sie keine Änderungen am aktuellen Titel vornehmen:

function custom_document_title( $title ) {
    return 'Here is the new title';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );

Zweiter Weg verwendet document_title_separator und document_title_parts Hooks für den Titel und den Titeltrenner, die später in der Funktion ausgeführt werden, nachdem der Titel mit Funktionen wie generiert wurde single_term_title oder post_type_archive_title abhängig von der Seite, die ausgegeben werden soll:

// Custom function should return a string
function custom_seperator( $sep ) {
   return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );

// Custom function should return an array
function custom_html_title( $title ) {
   return array(
     'title' => 'Custom Title',
     'site'  => 'Custom Site'
    );
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );

Ich habe jede einzelne Lösung im Internet durchforstet und Hunderte von Beispielen ausprobiert.

Am Ende … Gut gemacht joemaller Da dies an erster Stelle steht, wurde alles gelöst!

add_filter('wpseo_title', '__return_empty_string');

1389470cookie-checkadd_filter(‘wp_title’) ersetzt mein Titel-Tag nicht (WordPress-Plugin)

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

Privacy policy