特定のURLについてwp_titleの結果を取得しようとしています。私はページが要求されたときにajaxレスポンスを形成するためにこれをしています。
私はいくつかの応答を読んだことがある(例えば ページIDから変数にwp_title()を取得する )。デフォルト関数を上書きします。
どういうわけか、YOASTが吐き出すタイトルを手に入れたいです。
私がループの中にいるならば、wp_titleを呼び出すことは私に望ましい結果を与えます。私が言ったように、しかし、私はループの外でこれをやっています。私は以下を試しました:
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");
ご協力ありがとうございます
編集:
私はカスタムループでリクエストをやろうとしましたが、それはまだうまくいきません。これが私が試した方法です。
$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;
I get here
という応答が返されるので、クエリは機能していると確信していますが、それでもタイトルが表示されません。
編集2:
Wp_titleの内部動作を調べたところ、実際にはpost
変数ではなくグローバルwp_query
変数を使用していることに気付きました。タイトルはアーカイブページや検索ページ、投稿ページで機能する必要があるので、これは意味があると思います。
テスト目的で、私はサイトのabout-usページのクエリを確認して再現しました。 var_dumpsとdiffを行った後、about usページのheadセクションまたはajax関数でクエリを実行しても、クエリが同じになることを確認しました。これが私のやり方です。
$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();
私は今応答» About us
を得ます。これはほぼ正しいのですが、Yoastによる変更がまだ得られていません。 Yoastプラグインを使用して、タイトルをTestに設定しました。
私はチェックしました、そしてYoastプラグインは彼らがそれらを変更する方法であるwp_titleフックを使用します。プラグインが機能をフックしているのがajax環境で実行されない理由はありますか?もしそうなら、これを回避する方法はありますか?
Yoastプラグインの変更はメインページで行われています。私のheader.php
には、次のものがあります。
<title><?php wp_title();?></title>
HTMLソースはこれを持っています:
<title>Test</title>
YOASTのSEOタイトルはmeta_keyに格納されています。これを試して-
$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'];
またはこれ -
$titles = get_option( 'wpseo_titles' );