J'essaie d'obtenir le résultat de wp_title pour une URL spécifique. Je le fais pour former une réponse ajax quand une page est demandée.
J'ai lu plusieurs réponses (par exemple . Obtenez wp_title () à partir de l'ID de page dans une variable ), ce qui est génial, sauf que j'utilise Yoast SEO qui (je crois) remplace la fonction par défaut.
J'aimerais en quelque sorte obtenir le titre que YOAST cracherait.
Si je suis dans la boucle, appeler wp_title me donne le résultat souhaité. Comme je l'ai dit, cependant, je le fais en dehors de la boucle. J'ai essayé ce qui suit:
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");
Merci d'avance pour votre aide
Modifier:
J'ai également essayé de faire la demande dans une boucle personnalisée mais cela ne fonctionne toujours pas. Voici comment je l'ai essayé:
$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;
Je reçois la réponse I get here
alors je suis sûr que la requête fonctionne mais je ne reçois toujours pas le titre.
Modifier 2:
Après avoir examiné le fonctionnement interne de wp_title, j'ai remarqué qu'il utilise en réalité la variable globale wp_query
plutôt que la variable post
. Je suppose que cela prend tout son sens car le titre doit fonctionner sur les pages d’archive/recherche ainsi que sur les pages de publication.
À des fins de test, j'ai vérifié la requête pour la page à propos de nous sur le site et je l'ai reproduite. Après avoir fait var_dumps et diffs, j'ai confirmé que la requête est maintenant la même si je le fais dans la section head de la page à propos de nous ou dans la fonction ajax. Voici comment je le fais:
$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();
Je reçois maintenant la réponse » About us
. C'est presque exact, mais les modifications apportées par Yoast ne sont toujours pas reçues. En utilisant le plugin Yoast, j'ai défini le titre sur Test.
J'ai vérifié et le plugin Yoast utilise le hook wp_title qui est la façon dont ils apportent leurs modifications. Y a-t-il une raison pour que les fonctions liées aux plugins ne soient pas exécutées dans un environnement ajax? Si oui, y a-t-il un moyen de contourner cela?
Les modifications du plug-in Yoast fonctionnent sur la page principale. Dans mon header.php
, j'ai les éléments suivants:
<title><?php wp_title();?></title>
La source HTML a ceci:
<title>Test</title>
Le titre de référencement de YOAST est stocké dans une méta_key. Essaye ça-
$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'];
Ou ca-
$titles = get_option( 'wpseo_titles' );