我正在尝试获取特定url的wp\\u title结果。我这样做是为了在请求页面时形成ajax响应。
我读过几篇回复(例如。Get wp_title() from page ID into a variable) 这是伟大的,除了我使用的Yoast搜索引擎优化(我相信)超越了默认功能。
不知何故,我想得到尤斯特会吐出来的头衔。
如果我在循环中,调用wp\\u 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");
提前感谢您的帮助
Edit:
我也尝试过在自定义循环中执行请求,但仍然不起作用。我就是这样尝试的:
$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
所以我确信这个查询是有效的,但我仍然没有得到标题。
Edit 2:
在查看了wp\\u title的内部工作之后,我注意到它实际上使用了全局
wp_query
变量而不是
post
变量我想这很有意义,因为标题需要在存档/搜索页面以及帖子页面上工作。
出于测试目的,我在网站上查看了关于我们的页面并复制了它。在执行var\\u 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插件,我将标题设置为测试。
我已经检查过了,Yoast插件使用了wp\\u标题挂钩,这是他们进行更改的方式。是否有任何原因导致插件钩住的函数不能在ajax环境中运行?如果是这样的话,有什么办法可以解决这个问题吗?
Yoast插件的更改正在主页上进行。在我的header.php
我有以下几点:
<title><?php wp_title();?></title>
HTML源具有以下内容:
<title>Test</title>