防止所选术语上升到顶部

时间:2012-11-28 作者:Tom J Nowell

当您编辑帖子并选择子类别或术语并进行更新时,所选术语会显示在顶部(这可能会导致混淆的情况,即“foo”、“foo”和“foo”分别由不同的父级选择,无法区分它们)。

如何防止这种行为?要么显示父术语以提供上下文,要么停止将其移到顶部

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

这也让我讨厌。这很令人困惑,所以我想我应该调查一下。

该元框是在中创建的"wp-admin/includes/meta-boxes.php" on line ~399. 它使用wp_terms_checklist. 问题代码似乎是这样的(这是源代码中的一个):

<?php wp_terms_checklist(
    $post->ID, array( 
        \'taxonomy\' => $taxonomy, 
        \'popular_cats\' => $popular_ids 
) ) ?>
这给我留下了几个选择。

您可以使用Javascript对列表进行重新排序。您无法删除古怪的类别,因为它们在列表中不可用。但我怀疑这会很快或很容易。

或者,可以使用删除默认框remove_meta_box 并使用add_meta_box 将上面的行更改为:

<?php wp_terms_checklist(
    $post->ID, 
    array( 
        \'taxonomy\' => $taxonomy,
        \'popular_cats\' => $popular_ids 
        \'check_ontop\' => false 
) ) ?>
Thechecked_ontop 部分是关键。要添加这几个字符,删除和添加一个元盒似乎还有很长的路要走,我有点讨厌这样做,因为它非常接近核心黑客(但不是:),尽管对核心的更改可能意味着需要重写该函数。不过,我认为没有任何其他实物期权。

EDIT: 好啊我原本以为没有钩子可以帮上忙,但有一个钩子。你只需要:

function tst($args) {
    $args[\'checked_ontop\'] = false;
    return $args;
}
add_filter(\'wp_terms_checklist_args\',\'tst\');
这将在全球范围内改变事物,因此可能有必要对其进行更改,使其仅在特定页面上运行。

幸亏Tom J Nowell. 有时候犯错是好事。

SO网友:Chris

我可能误解了这个问题,但是如果你知道,看看最初的层次结构,哪些子类别是合适的,那么你可以使用如下插件Parent Category Toggler 选择子对象时自动选择父对象。

结束

相关推荐

WordPress是否限制Post Meta或Terms的插件名称的长度?

WordPress Codex指出,帖子类型名称和分类名称对slug名称有限制。Register Post Type -- 最多20个字符,不能包含大写字母或空格Register Taxonomy -- 分类的名称。名称应为插入形式(不得包含大写字母或空格),长度不得超过32个字符(数据库结构限制)</然而,WordPress Codex没有说明Post Meta或Terms是否对slug名称有限制。Add Post Meta -- 无缓动限制Insert Term -- 无缓动限制</这能得