webentwicklung-frage-antwort-db.com.de

Holen Sie sich wp_title wp ajax

Ich versuche, das Ergebnis von wp_title für eine bestimmte URL abzurufen. Ich mache dies, um eine Ajax-Antwort zu bilden, wenn eine Seite angefordert wird.

Ich habe mehrere Antworten gelesen (zB Holen Sie sich wp_title () von der Seiten-ID in eine Variable ), was großartig ist, außer ich verwende Yoast SEO, das (ich glaube) überschreibt die Standardfunktion.

Ich möchte irgendwie den Titel bekommen, den YOAST ausspucken würde.

Wenn ich mich in der Schleife befinde, erhalte ich das gewünschte Ergebnis, wenn ich wp_title aufrufe. Wie ich schon sagte, mache ich das jedoch außerhalb der Schleife. Ich habe Folgendes versucht:

function requestPage() {
    $url = esc_html($_GET['pageChange']);
    if($url == "/"):
        $url = get_home_url();
    endif;
    $postID = url_to_postid( $url );
    global $post;
    $post = get_post($postID);
    setup_postdata( $post );
    wp_title();
    die();
}
add_action("wp_ajax_page_change", "requestPage");
add_action("wp_ajax_nopriv_page_change", "requestPage");

Vielen Dank im Voraus für jede Hilfe

Bearbeiten:

Ich habe auch versucht, die Anforderung in einer benutzerdefinierten Schleife auszuführen, aber sie funktioniert immer noch nicht. So habe ich es versucht:

$query = new WP_Query(array(
    'p'         => $postID,
    'post_type' => 'any'
));
if($query->have_posts()):
    while ($query->have_posts() ): $query->the_post();
        echo "I get here";
        wp_title();
    endwhile;
endif;

Ich erhalte die Antwort I get here, also bin ich sicher, dass die Abfrage funktioniert, aber ich erhalte immer noch nicht den Titel.

Edit 2:

Nachdem ich mir die inneren Funktionen von wp_title angesehen habe, habe ich festgestellt, dass tatsächlich die globale Variable wp_query und nicht die Variable post verwendet wird. Ich nehme an, dies ist sinnvoll, da der Titel sowohl für Archiv-/Suchseiten als auch für Postseiten verwendet werden muss.

Zu Testzwecken überprüfte ich die Abfrage für die Über-uns-Seite auf der Site und reproduzierte sie. Nachdem ich var_dumps und diffs ausgeführt habe, habe ich bestätigt, dass die Abfrage jetzt dieselbe ist, wenn ich dies im head-Abschnitt der about us-Seite oder in der Ajax-Funktion tue. So mache ich es:

$query = new WP_Query(array(
    'page'              => '',
    'pagename'          => 'about-us'
));
global $wp_query;
$wp_query = $query;
var_dump($wp_query);  //This is the same as a var_dump on about us page
wp_title();

Ich bekomme jetzt den Antwortcode » About us. Das ist fast richtig, aber es werden immer noch nicht die Änderungen übernommen, die Yoast vornimmt. Mit dem Yoast-Plugin habe ich den Titel auf Test gesetzt.

Ich habe es überprüft und das Yoast-Plugin verwendet den Haken wp_title, mit dem sie ihre Änderungen vornehmen. Gibt es einen Grund, warum die eingebundenen Funktionen des Plugins nicht in einer Ajax-Umgebung ausgeführt werden würden? Wenn ja, gibt es einen Weg, dies zu umgehen?

Die Änderungen am Yoast-Plugin wirken sich auf die Hauptseite aus. In meinem header.php habe ich Folgendes:

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

Die HTML-Quelle hat Folgendes:

<title>Test</title>
1

Der SEO-Titel von YOAST wird in einem meta_key gespeichert. Versuche dies-

$taxonomy = get_queried_object()->taxonomy;
$term_id = get_queried_object()->term_id;
$meta   = get_option( 'wpseo_taxonomy_meta' );
$title  = $meta[$taxonomy][$term_id]['wpseo_title'];

Oder dieses-

$titles = get_option( 'wpseo_titles' );
1
Neit