将旧员额标记为不再相关

时间:2019-04-11 作者:R Reveley

我在一家公司工作,有几种产品将合并为一种产品。他们希望保留过去几年的旧博客帖子,但在顶部有一个通知,警告用户我们有一个新产品,他们所发布的帖子可能指的是不再存在的产品。

Option 1

我的第一个想法是硬编码,如果帖子创建日期在[日期]之前,请从帖子ID=___

Option 2

然后我想,实际上,创建一个新类别会更加灵活,可以将旧帖子添加到该类别中,并且该类别中的任何帖子(无论如何访问)都会添加与上述内容相同的附加内容。

第二种选择听起来可行吗?我试着为第一个插件找到现成的插件,但除了按年龄而不是日期应用的插件外,找不到其他插件。

有人能建议我怎么做选项2吗?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你的直觉是,选项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\'
]);

相关推荐

Dropdown menu for categories

当我使用下面的代码时<?php wp_nav_menu( array(\'menu\' => \'categories\' )); ?> 我可以创建一个新的菜单来列出我创建的wordpress中的所有类别。我用它在页面中间列出所有类别。我现在的问题是:有没有一种简单的方法可以为存在的每个子类别创建下拉菜单?那么,当我点击一个特定的类别时,它的子类别会显示出来吗?