0

我试图通过它的 slug 从 wordpress 标签云中排除一个标签。

经过整个星期六的搜索和尝试后,我得到的是:

$term = get_term_by('slug', 'widget', 'portfolio-tag');
$term_id = $term->term_id;
$string_id = "'" . $term_id . "'";

add_filter('widget_tag_cloud_args', 'my_widget_tag_cloud_args');

function my_widget_tag_cloud_args($args) {

    $args['number']    = 0;
    $args['largest']   = 18;
    $args['smallest']  = 8;
    $args['unit']      = 'pt';
    $args['order']     = 'DESC';
    $args['orderby']   = 'count';
    $args['separator'] = ' ';
    $args['exclude']   = print_r($string_id, true);
    return $args;
}

我想以上不是我今天下午尝试的最佳选择,但它是最后一个。print_r($term_id)如果我用来检查,下面的代码将返回数字 18 :

$term = get_term_by( 'slug', 'widget', 'portfolio-tag' );
$term_id = $term->term_id;

如果我使用$args['exclude'] = '18';名为“小部件”的标签,则会被排除。我唯一还没有做到的是做这样的事情:$args['exclude'] = $term_id;

我知道 exclude 参数只接受字符串。我之所以不把 18 放在那里是因为我喜欢与一些艺术家朋友分享我的主题。

我做了一个主题来展示我的画。我还制作了一个小部件,它将显示一个名为“小部件”的随机绘画。只有在标签云中拥有它是没有用的。信不信由你,但与我的艺术家朋友相比,我到目前为止是计算机专家;)所以我想让他们尽可能简单,只需将小部件标签放在绘画上,其余的就可以了——至少,这是计划。

4

3 回答 3

1

我可以在这里发现的主要问题与变量范围有关:

您设置的$string_id在 中不可用,my_widget_tag_cloud_args()因为您在该功能之外设置了它。

因此,您需要将生成它的代码移到那里或找到另一种方法来完成这项工作,例如使用匿名函数或为此使用对象。

$exclude_term_id = get_term_by('slug', 'widget', 'portfolio-tag')->term_id;

add_filter('widget_tag_cloud_args',
    function ($args) use ($exclude_term_id) {

        $args['number']    = 0;
        $args['largest']   = 18;
        $args['smallest']  = 8;
        $args['unit']      = 'pt';
        $args['order']     = 'DESC';
        $args['orderby']   = 'count';
        $args['separator'] = ' ';
        $args['exclude']   = $exclude_term_id;

        return $args;
    });

我发现的其他问题是使用,print_r然后将实际 ID 包含在单引号中。这两者都没有必要。在 PHP 中,整数和字符串通常可以互换。如果没有,只需投射

add_filter('widget_tag_cloud_args', 'my_widget_tag_cloud_args');

function my_widget_tag_cloud_args($args) {

    $term = get_term_by('slug', 'widget', 'portfolio-tag');

    $args['number']    = 0;
    $args['largest']   = 18;
    $args['smallest']  = 8;
    $args['unit']      = 'pt';
    $args['order']     = 'DESC';
    $args['orderby']   = 'count';
    $args['separator'] = ' ';
    $args['exclude']   = (string) $term->term_id;
    return $args;
}
于 2013-01-05T22:12:54.717 回答
1

你的问题是范围。您在函数外部定义的变量在函数内不再可访问并且无法修改,除非您在范围内使变量成为全局变量(不明智)或通过引用传递变量(在这种情况下不可能)。

无论如何,您只需要将所有内容都放在范围内:

add_filter( 'widget_tag_cloud_args', 'my_widget_tag_cloud_args' );
function my_widget_tag_cloud_args( $args ) {
    $term = get_term_by( 'slug', 'widget', 'portfolio-tag' );
    $args['number'] = 0;
    $args['largest'] = 18;
    $args['smallest'] = 8;
    $args['unit'] = 'pt';
    $args['order'] = 'DESC';
    $args['orderby'] = 'count';
    $args['separator'] = ' ';
    $args['exclude'] = (string)$term->term_id;     
    return $args;
}
于 2013-01-05T22:13:15.060 回答
0

在您的代码中

$args['exclude'] = print_r($string_id,true);

应该

$args['exclude'] = array($term_id);

所以,它可能是

add_filter( 'widget_tag_cloud_args', 'my_widget_tag_cloud_args' );
function my_widget_tag_cloud_args( $args ) {
    $term = get_term_by( 'slug', 'widget', 'portfolio-tag' );
    // more args...
    $args['exclude'] = array($term->term_id);     
    return $args;
}

参考这里。

于 2013-01-05T22:10:56.483 回答