404第二次加载子页面时出错

时间:2013-06-14 作者:Philipp

我有一个奇怪的问题,我真的不明白:

我的网站有该页面community 还有一个子页面test. Permalink结构设置为/%postname%/

因此,页面的URL为:

我的网站。com/community/mysite。com/community/test当我打开“community/test”页面时,它会正确显示。但是当我点击F5/刷新测试页面时,我得到了一个404错误!当我再次刷新时,我不断收到404个错误,直到我加载另一个页面(如首页),然后返回到测试页面。然后,测试页面在第一次请求时再次显示,但在刷新时,我再次得到404。

这些是普通的WordPress页面,没有自定义的帖子类型等。WordPress安装也没有使用多站点。我不知道是什么导致了这个问题。。。

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

我从来没有找到这个问题的真正原因。然而,这个“错误修复”确实为我解决了这个问题:

add_action( \'template_redirect\', \'handle_strange_bug\', 10 );

// "Fixes" the strange bug...
function handle_strange_bug() {
    global $post;

    $post_id = 123; // This is the post that makes problems.

    /* ===== Start of the bugfix.
     *
     * If the $post->ID is not set, but the URL indicates we are on the problem-
     * page then do a redirect to an alternative URL for the page. After the
     * redirect we always had a valid $post->ID, so 
     */
    if ( !isset($post->ID) ) {
        // The function is defined below.
        $my_url = get_current_url();

        if ( $my_url == get_permalink($post_id) )  {
            $good_url = site_url() . \'?page_id=\' . $post_id;
            wp_redirect($good_url);
        }
    }
    // ===== End of the bugfix.
}

// Helper function. Returns the full URL of the current request.
function get_current_url() {
    if ( @$_SERVER[\'HTTPS\'] == \'on\' ) { 
        $page_url = \'https://\'; 
    } else {
        $page_url = \'http://\';
    }
    $page_url .= @$_SERVER[\'SERVER_NAME\'];
    if ( @$_SERVER[\'SERVER_PORT\'] != \'80\' ) {
        $page_url .= \':\' . @$_SERVER[\'SERVER_PORT\'];
    }
    $page_url .= @$_SERVER[\'REQUEST_URI\'];
    // Remove the Query-string from the URL.
    if ( $pos_get = strpos($page_url, \'?\') ) { 
        $page_url = substr($page_url, 0, $pos_get);
    }
    return $page_url;
}

结束

相关推荐

Taxonomy based permalinks

在我的网站上,我使用自己的分类法。我希望分类学与permalink相结合。因此,如果一个新闻页面有分类法,permalink就会改变。像这样:mysite。com/%custom\\u tax%/blog/%postname%,如果是一个页面,请点击:mysite。com/%custom\\u tax%/%postname%但如果没有我想要的分类法:mysite。com/blog/%postname%,如果它是一个页面:mysite。com/%postname%我怎样才能轻松地做到这一点?我已经设置了%c