因此,我需要在元查询子句中运行税务查询。对于“meta\\u query”参数,这似乎是不可能的,如下所示:
正确,使用的参数无法执行您想要执行的操作WP_Query
同时保持数据按原样存储。查询已经非常昂贵/运行速度很慢,如果您可以添加分类术语查询,它将更加昂贵。
相反,这些值不应该存储为post meta,而应该存储为分类术语。您可以使用私有/隐藏的分类法来实现这一点,并且可以告诉ACF使用该分类法来存储值。
例如,ashow_in
具有以下术语的分类法on_tour
或is_creation
.
然后可以使用标准tax_query
条款您还可以创建辅助术语,例如not_on_tour
, 让你拿着超贵的NOT IN
查询并将其替换为超便宜/快速版本。
此外,您可以使用has_term
, e、 g.:
// should we show this post on the homepage?
if ( has_term( [ \'homepage\' ], \'show_on\' ) {
//
}
这比post meta的查询速度要快得多,在大型网站上,这可以比post meta的查询速度快数千倍。
您还可以将其中一些操作自动化,例如,在我参与的许多网站上show_on_homepage
使用自动将术语添加到每个帖子中save_post
钩然后,用户可以删除该术语并将其替换为hide_on_homepage
学期这也是一种让用户管理突出页面区域的好方法,比如show_in_homepage_carousel
学期
在主页上支持这一点所需的只是一个名为hidden_post_markers
, 和中的一个片段functions.php
像这样:
add_action( \'pre_get_posts\', function( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( \'hidden_post_markers\', \'show_on_homepage\' );
}
} );
作为一般指南:
如果您需要通过一段数据来查找帖子或查询帖子,则该数据应在分类法中表示为一个术语。如果只有在您已经知道帖子ID时(例如在显示帖子时)才能访问关于帖子的一段数据,则使用post meta,您可以将数据存储在这两个术语中,您可以存储一个简化的查询术语版本,在post meta for display中有一个更详细的版本,您可以将布尔数据存储为术语,最简单的方法是使用_true
和_false
附加到名称中,或者只是测试术语的存在,post meta表不是为搜索帖子而设计的,除了主要的性能问题之外,分类法/术语系统是为搜索帖子、在查询中过滤帖子等而设计的meta_query
随着帖子数量的增加,查询变得更加昂贵,而且变得昂贵/慢/快