仅在前面更改术语名称

时间:2017-03-09 作者:Krzysztof Grabania

我正在尝试根据自定义选择更改用户的术语名称。在术语meta中,我存储select选项的ID,并基于此ID在另一个分类法中查找适当的名称。现在,我想将这部分文本添加到每个术语名称中。我能找到的唯一过滤器是get_term (或get_{$taxonomy}) 和get_terms 查看更多项目。

问题是:在向$term->name 在任何一个过滤器中,它都会显示在名称输入的编辑术语屏幕中。这没什么奇怪的,因为我过滤了名称,所以它会显示在每个地方,但我如何才能防止在管理屏幕上出现这种行为?这是有问题的,因为此文本是select中的选项,所以每次保存后,下一个名称将附加到我的术语名称中。

图像问题:

enter image description here

每次保存后:

enter image description here

这是我的代码:

add_filter(\'get_term\', \'filter_term_name\', 10, 2);

function filter_term_name($term, $taxonomy) {
    if ($taxonomy == \'my-taxonomy\') {
        // numeric value of term in another taxonomy
        $meta_value = get_term_meta($term->term_id, \'_my_meta_name\', true);

        if ($meta_value) {
            // get name of meta value from another taxonomy
            $value = get_term($meta_value, \'another-taxonomy\');

            if ($value) {
                $term->name = sprintf(\'%s, %s\', $value->name, $term->name);
            }
        }
    }

    return $term;
}

1 个回复
SO网友:rassoh

您可以使用该功能检测您是否在前端is_admin(), 像这样:

add_filter(\'get_term\', \'filter_term_name\', 10, 2);

function filter_term_name($term, $taxonomy) {
    // return the term untuched if you are in the admin
    if( is_admin() ) {
        return $term;
    }
    if ($taxonomy == \'my-taxonomy\') {
        // numeric value of term in another taxonomy
        $meta_value = get_term_meta($term->term_id, \'_my_meta_name\', true);

        if ($meta_value) {
            // get name of meta value from another taxonomy
            $value = get_term($meta_value, \'another-taxonomy\');

            if ($value) {
                $term->name = sprintf(\'%s, %s\', $value->name, $term->name);
            }
        }
    }

    return $term;
}

相关推荐

什么时候应该/不应该使用wp_get_post_Terms与Get_the_Terms?

一位用户在codex中提供了一条注释,指出唯一的区别是get\\u术语使用缓存的数据,我已经知道wp\\u get\\u post\\u术语可以让您通过slug检索数据,但我仍然想知道使用其中一个与另一个的最佳情况是什么。