我如何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_cap的问题在于,只有登录的用户具有功能。

有帮助吗?

解决方案

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

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。

其他提示

首先,我必须同意 @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 );

更新: :修订的代码要使用 the_posts 过滤而不是 posts_results (在WordPress检查权限之前发射的是,因此 $posts 还没有被“清空”)。

在我看来,您不应该返回404或301-您应该返回401(未经授权 /身份验证,尽管您不接受提供的任何身份验证)或403(被拒绝,又名我知道您的要求而且你不能拥有它)。

有一个废弃的插件 禁止私人页面 这可能值得寻求指导,尽管偶然地看着404转换为403,这似乎是一个坏主意。不幸的是,尽管有各种各样的讨论(请参阅 https://core.trac.wordpress.org/ticket/10551 并相关)修复的里程碑已逐渐转向“未来发布”。

许可以下: CC-BY-SA归因
scroll top