web-dev-qa-db-ja.com

Wp_title wp ajaxを入手してください。

特定の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>
1

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' );
1
Neit