我已经完成了为我的站点中的自定义帖子类型创建自定义分类法+管理面板的过程。这些分类法将各种元数据存储在wp_taxonomymeta
表,并使用get\\u metadata/set\\u metadata来获取和设置这些字段的值。此分类法中的一个字段是启用/禁用标志。
我想全局排除禁用标志设置为true的帖子。我正迷上pre_get_posts
, 但我不知道如何修改查询以便在wp_taxonomymeta
用于在查询中排除应隐藏的帖子。有人能对此提供一些见解吗?我在谷歌上找不到多少有用的建议。如果需要澄清,请询问,我将尽最大努力澄清任何混淆。
EDIT FROM COMMENTS
我正在尝试修改主查询。这个想法最终是能够基于分类法的元数据标志值在整个站点上全局隐藏/显示。所以我有一个插件,它实现了
pre_get_posts
钩子,但我无法用自定义表来计算查询(至少在典型的wordpress方式中,原始SQL是蛋糕,但我想修改主查询)。
由于在wordpress中使用这些分类表似乎是一种有争议的方式,因此没有太多文档可供使用。
SO网友:Cody Mays
对于那些将来遇到问题的人,我是这样做的:
我做了我的pre_get_posts
如果分类法ID不在列表中,则将分类法作为常规查询以进行测试的函数:
$q->set( \'tax_query\', array(array(
\'taxonomy\' => \'tax\',
\'field\' => \'id\',
\'terms\' => tax_get_inactive(),
\'operator\' => \'NOT IN\'
)));
然后,我实现了
tax_get_inactive
如上所示的函数,用于查询
taxonomymeta
表并构建排除列表。这不是最优雅的方式,但它可以工作,并且如果考虑到性能,可以轻松缓存排除列表。