我认为这是因为get_page_by_path()
检查内部WP_Query
, 因为它正在检查两者page
和attachment
鼻涕虫,在这种情况下。
所以如果我们有一个附件和一个帖子someslug
postname和访问:
example.tdl/someslug
那么
get_page_by_path()
将生成以下查询:
SELECT ID, post_name, post_parent, post_type
FROM wp_posts
WHERE post_name IN (\'someslug\')
AND post_type IN (\'page\',\'attachment\')
因此,我们收到的是附件页面,而不是帖子页面。
因此,这似乎是一个核心特性,而不是插件生成的bug。
解决方法
由于permalink设置,post请求就像页面请求一样处理。
因此,我们有pagename
构造的查询变量,而不是name
查询变量。
我们可以调整为post请求生成的查询变量:
/**
* Handle post requests correctly, in the case of the /%postname%/ permalink settings
*/
! is_admin() && add_filter( \'request\', function( $query_vars )
{
if(
isset( $query_vars[\'pagename\'] )
&& $post = get_page_by_path( $query_vars[\'pagename\'], OBJECT, \'post\' )
) {
if( is_a( $post, \'\\WP_Post\' ) )
{
// Add the \'name\' query variable
$query_vars[\'name\'] = $post->post_name;
// Unset the \'pagename\' query variable
unset( $query_vars[\'pagename\'] );
}
}
return $query_vars;
}, PHP_INT_MAX );
在这里,我们检查是否存在带有
pagename
slug,如果它存在,我们构造
name
查询变量并最终取消设置
pagename
查询变量。
现在应该是服务岗位,而不是附件。