帖子被重定向至附件帖子

时间:2015-10-06 作者:Robert hue

这是我在这个网站上遇到的奇怪问题。类似this problem 我正试着从过去几周开始修复这个问题。

此网站已安装最新的WordPress,并且/%postname%/ permalink构造。

有时,当我试图查看帖子时,会被重定向到附件帖子/?attachment_id=358 而不是帖子本身。当帖子和附件标题相同时,就会出现这种情况。

虽然如果我改变帖子的永久链接,我可以让帖子再次运行。但这太晚了,因为这个网站会自动发布和共享帖子。当用户没有找到正确的帖子时,就会出错。

我已经尝试禁用所有插件一段时间了。没有起作用。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我认为这是因为get_page_by_path() 检查内部WP_Query, 因为它正在检查两者pageattachment 鼻涕虫,在这种情况下。

所以如果我们有一个附件和一个帖子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 查询变量。

现在应该是服务岗位,而不是附件。

相关推荐

Post with Custom Permalinks

我的永久链接设置如下:http://myblog.com/%category%/%postname%/一切正常。但我正在寻找一种方法,只为一些帖子(10-11篇帖子)设置如下永久链接。http://myblog.com/%postname%/我之所以要这样做,是因为我正在合并两个WordPress网站,我不想失去另一个网站的帖子,这些帖子已经以旧的permalink结构发布在Facebook等网站上。