有两个答案,具体取决于您要在哪里执行此操作。一个有好消息,另一个有坏消息
在任何使用Post查询的地方,修改SQL在这里几乎没有必要,而且通常是被忽略的迹象。在这种情况下,WP_Query
已经提供了一个简单的参数来执行此操作,名为has_password
.
考虑到这一点,我们可以修改主循环,通过pre_get_posts
:
add_action( \'pre_get_posts\', function ( \\WP_Query $q ) {
if ( is_admin() || $q->is_singular() ) {
return;
}
$q->set( \'has_password\', false );
} );
使用get_calendar
功能包括日历小部件和块,恐怕消息不太好。
get_calendar
不使用WP_Query
, 而是使用原始SQL查询来统计帖子(它不会检索帖子)。它也没有为SQL提供过滤器。
但它确实提供了两个机会:
在get_calendar
过滤器为您提供最终HTML,允许您对最终字符串进行一些修改。有了它,您可以通过重新实现get_calendar
并返回新的HTML,该HTML排除了SQL中的私有帖子query
滤器因为get_calendar
直接调用WPDB查询,您可以对此进行筛选,however, 此筛选器在WP进行的所有查询上运行,而不仅仅是日历查询。您需要确定查询是否来自get_calendar
或者没有,这可能很难或不可能。如果修改的查询不是来自get_calendar
您可能会导致导致不稳定的问题。还有一个潜在的bug,get_calendar
检查是否有任何帖子,如果没有找到,则返回空字符串。如果该帖子是带密码的帖子,则可能导致日历没有帖子。请小心使任何过滤器在此运行得尽可能快,否则会大大降低WP的速度,这意味着过滤器中没有新的DB查询,没有获取数据,没有发出http请求或加载文件。还有递归循环的危险请注意get_calendar
按月和按年缓存,因此需要刷新缓存以查看更新的输出
为什么没有posts_where
工作
它不起作用,因为该过滤器是
WP_Query
, 未使用的
get_calendar
. 我建议不要使用这个,因为它会破坏
post_password
的参数
WP_Query
以及依赖于它的功能(例如
get_posts
或管理区域)