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