受密码保护的帖子在您登录之前是不可见的

时间:2012-04-09 作者:ERM

我添加了一篇帖子,并对其进行了密码保护。这篇文章不会显示在我放在课程页面上的类别列表中,也不会显示在搜索中,除非你直接转到页面然后登录。然后它开始出现在课程页面上。你知道如何让帖子的链接可见吗?他们应该显示的页面如下:http://www.andrewruis.com/course/. 如果搜索“asb 129”,则搜索中不会显示任何内容。

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

如果应用了post密码且用户未登录,则post将不会显示在搜索结果中。这是的预期行为WP_Query:

// If a search pattern is specified, load the posts that match
if ( !empty($q[\'s\']) ) {
    // added slashes screw with quote grouping when done early, so done later
    $q[\'s\'] = stripslashes($q[\'s\']);
    if ( !empty($q[\'sentence\']) ) {
        $q[\'search_terms\'] = array($q[\'s\']);
    } else {
        preg_match_all(\'/".*?("|$)|((?<=[\\r\\n\\t ",+])|^)[^\\r\\n\\t ",+]+/\', $q[\'s\'], $matches);
        $q[\'search_terms\'] = array_map(\'_search_terms_tidy\', $matches[0]);
    }
    $n = !empty($q[\'exact\']) ? \'\' : \'%\';
    $searchand = \'\';
    foreach( (array) $q[\'search_terms\'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}(($wpdb->posts.post_title LIKE \'{$n}{$term}{$n}\') OR ($wpdb->posts.post_content LIKE \'{$n}{$term}{$n}\'))";
        $searchand = \' AND \';
    }

    if ( !empty($search) ) {
        $search = " AND ({$search}) ";
        if ( !is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = \'\') ";
    }
}
看到底部了吗?if ( !empty($search) ) { 检查是否正在排队搜索,如果用户未登录,则只显式搜索未设置密码的帖子。

如果您仍然需要对内容进行密码保护,我建议您选择以下两种方式之一:

1需要一个帐户

您可以轻松地要求用户在查看内容之前登录-无论是受密码保护的帖子还是私人帖子。这使您可以完全控制谁可以查看内容。

2构建您自己的小部件

您试图在动态小部件中包含指向此受密码保护内容的链接。要么使用静态列表(手动编辑文本以包含链接),要么构建自己的动态小部件,使其包含受密码保护的帖子。

结束

相关推荐

如何在管理中用图标替换“Password Protected”文本

在Wordpress中,每当帖子受到密码保护时,后端管理区域都会在帖子标题后添加粗体“-密码保护”文本。我正在寻找的是一种删除此文本的方法,而是让它使用一个图标(下面的链接),该图标应附加在标题文本之前。如何做到这一点?我想使用Aesthetica Icon Set 通过http://dryicons.com: