你的直觉是,选项2将更加灵活,这是正确的。谢天谢地,您没有想到选项3(使用post meta),但选项3有一个令人担忧的警告:性能,所以请使用选项2
然后我想,实际上,创建一个新类别会更加灵活,可以将旧帖子添加到该类别中,并且该类别中的任何帖子(无论如何访问)都会添加与上述内容相同的附加内容。
因此,您可以创建一个名为“过期”或“已替换”的类别或类似的内容,在模板中显示横幅。然后,您可以通过后期编辑屏幕手动分配它。
这仍然留下了链接到更相关的产品/帖子的问题。这可以通过内容中的链接来完成,但您也可以将其存储在post meta/custom字段中。您可以添加一个元盒和一些保存代码,或者依赖现有的库或插件(ACF为此很流行,Field Manager插件/库也是如此)。
第二种选择听起来可行吗?
完全可行。通常,人们会在post meta中添加一个标志来实现这一点,但这会带来一个重大陷阱。一旦您尝试使用该帖子元值过滤或查询帖子,您的性能就会受到影响。理想的解决方案是使用分类法,如您建议的类别分类法。分类法被设计为当您知道一条信息时快速查找帖子的方法。Post meta旨在当您知道帖子时,快速找到一条信息。
我试着为第一个插件找到现成的插件,但除了按年龄而不是日期应用的插件外,找不到其他插件。
请注意,插件reccomendations在这个网站上是离题的,但您要做的并不是很难
关于实施的建议,我的第一个建议是,如果你为不再相关的帖子添加一个类别,那么如果你为仍然相关的帖子添加一个类别,将对绩效有很大帮助。这样一来,一篇文章总是会有一篇或另一篇,让您在查询中过滤这些文章,同时避免性能杀手__not_in
查询。
我的另一个建议是不要使用类别,而是使用非公共的自定义分类法。将其设置为非层次结构,使其行为类似于标记。通过这种方式,您可以将其他标记的分类法重新用作一种幕后发布板/标记系统。
至于真正做到这一点。假设您创建了自定义分类法,例如:
// Register Custom Taxonomy
function register_utility_tags() {
$labels = array(
\'name\' => _x( \'Utility Tags\', \'Taxonomy General Name\', \'text_domain\' ),
\'singular_name\' => _x( \'Utility Tag\', \'Taxonomy Singular Name\', \'text_domain\' ),
\'menu_name\' => __( \'Utility Tags\', \'text_domain\' ),
\'all_items\' => __( \'All Items\', \'text_domain\' ),
\'parent_item\' => __( \'Parent Item\', \'text_domain\' ),
\'parent_item_colon\' => __( \'Parent Item:\', \'text_domain\' ),
\'new_item_name\' => __( \'New Item Name\', \'text_domain\' ),
\'add_new_item\' => __( \'Add New Item\', \'text_domain\' ),
\'edit_item\' => __( \'Edit Item\', \'text_domain\' ),
\'update_item\' => __( \'Update Item\', \'text_domain\' ),
\'view_item\' => __( \'View Item\', \'text_domain\' ),
\'separate_items_with_commas\' => __( \'Separate items with commas\', \'text_domain\' ),
\'add_or_remove_items\' => __( \'Add or remove items\', \'text_domain\' ),
\'choose_from_most_used\' => __( \'Choose from the most used\', \'text_domain\' ),
\'popular_items\' => __( \'Popular Items\', \'text_domain\' ),
\'search_items\' => __( \'Search Items\', \'text_domain\' ),
\'not_found\' => __( \'Not Found\', \'text_domain\' ),
\'no_terms\' => __( \'No items\', \'text_domain\' ),
\'items_list\' => __( \'Items list\', \'text_domain\' ),
\'items_list_navigation\' => __( \'Items list navigation\', \'text_domain\' ),
);
$args = array(
\'labels\' => $labels,
\'hierarchical\' => false,
\'public\' => false,
\'show_ui\' => true,
\'show_admin_column\' => true,
\'show_in_nav_menus\' => false,
\'show_tagcloud\' => false,
\'show_in_rest\' => true,
);
register_taxonomy( \'utility_tags\', array( \'post\' ), $args );
}
add_action( \'init\', \'register_utility_tags\', 0 );
我是用generatewp网站做的。鉴于上述情况,假设您将帖子标记为
irrelevant
, 然后,我们可以通过以下检查进行测试:
if ( has_term( \'irrelevant\', \'utility_tags\' ) ) {
// it\'s irrelevant
} else {
// it isn\'t
}
你也可以找到这样一些不相关的帖子:
$q = new WP_Query([
\'utility_tags\' => \'irrelevant\'
]);