如何让301个私帖而不是404个?

时间:2011-03-08 作者:Dan Gayle

如何重定向私人页面301,而不是404?如果帖子是私有的,WordPress会在SQL查询中过滤掉它,因此没有$post变量可供使用。

我希望此代码正常工作,但无法:

add_action(\'wp\',\'redirect_stuffs\', 0);
function redirect_stuffs(){
global $post;
    if ( $post->post_status == "private" && !is_admin() ):
        wp_redirect("http://dangayle.com/",301);
        exit();
    endif;
}
我不知道早于wp, 除了我知道这是一个用户角色问题之外。如果我可以将未登录的用户设置为具有该功能,则可能会解决此问题:

$publicReader -> add_cap(\'read_private_posts\');
add\\u cap的问题是,只有登录的用户才具有此功能。

3 个回复
最合适的回答,由SO网友:Dan Gayle 整理而成

对不起,伙计们,我找到了我的答案:

add_action(\'wp\',\'redirect_stuffs\', 0);
function redirect_stuffs(){
global $wpdb; 
    if ($wpdb->last_result[0]->post_status == "private" && !is_admin() ):
        wp_redirect( home_url(), 301 );
        exit();
    endif;
}
帖子/页面已从网站地图中删除,但该页面仍会显示在网站上,以便获得301\'d。

SO网友:TheDeadMedic

首先,我必须同意@fencepost的回答。然而,我忍不住发布了一个解决方案,所以我们来了!

function __intercept_private_page( $posts, &$wp_query )
{
    // remove filter now, so that on subsequent post querying we don\'t get involved!
    remove_filter( \'the_posts\', \'__intercept_private_page\', 5, 2 );

    if ( !( $wp_query->is_page && empty($posts) ) )
        return $posts; // bail, not page with no results

    // if you want to explicitly check it *is* private, use the code block below:   
    /*
        if ( !empty( $wp_query->query[\'page_id\'] ) )
            $page = get_page( $wp_query->query[\'page_id\'] );
        else
            $page = get_page_by_path( $wp_query->query[\'pagename\'] );

        if ( $page && $page->post_status == \'private\' ) {
            // redirect
        }
    */

    // otherwise assume that if the request was for a page, and no page was found, it was private
    wp_redirect( home_url(), 301 );
    exit;
}
is_admin() || add_filter( \'the_posts\', \'__intercept_private_page\', 5, 2 );
Update: 要使用的修订代码the_posts 筛选而不是posts_results (在WordPress检查权限之前激发,等等$posts 尚未“清空”)。

SO网友:fencepost

在我看来,你不应该返回404或301-你应该返回401(未经授权/需要身份验证,但你不会接受提供的任何身份验证)或403(被拒绝,也就是我知道你要什么,你不能得到它)。

有一个废弃的插件Private Page Forbidden 这可能值得一看以寻求指导,尽管乍一看,它似乎想将404转换为403,这似乎是个坏主意。不幸的是,虽然有各种各样的选项讨论(参见https://core.trac.wordpress.org/ticket/10551 和相关的)修复的里程碑已逐渐移到“未来版本”

结束

相关推荐