0

スラッグによってワードプレスタグクラウドからタグを除外しようとしています。

土曜日全体を検索して試した後、私が持っているのはこれです:

$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';「widget」という名前のタグを使用すると、除外されます。私がまだ管理していない唯一のことは、次のようなことをすることです:$args['exclude'] = $term_id;

除外パラメーターは文字列のみを受け入れることを知っています。そこに 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 に答える