サポート » 使い方全般 » ウィジェットに特定のカテゴリーだけ表示したい

  • 解決済 chatm

    (@chatm)


    wordpress5.8.1にサイドバーとして外観>ウィジェットを設定しています。
    ブロックから「カテゴリー」を選んでウィジェットに設定していますが、
    特定のカテゴリーだけを表示させたいので、いらないカテゴリーを
    function.phpに記述した下記の方法で除外しようとしましたが上手くいきません。
    ↓function.php

    add_filter('widget_categories_args', 'my_theme_catexcept',10);
    function my_theme_catexcept($cat_args){
        $exclude_id = '2';     // 除外するカテゴリID
        $cat_args['exclude'] = $exclude_id;     // 除外
        return $cat_args;
    }

    ウィジェットは sidebar.php に

    <aside class="side">
    
    <?php dynamic_sidebar('sidebar-1'); //サイドバー1 ?>
    
    </aside><!-- /side -->

    とし、function.phpに下記のようなスタイルを付けています

    //サイドバーウィジェット/ 
    	
    if(function_exists('register_sidebar')){
    
      register_sidebar(array(
        'name'          => 'サイドバー1',
        'id'            => 'sidebar-1',
        'description'   => '',
        'before_widget' => '<div class="category">',
        'after_widget' => '</div>',
        'before_title' => '<h3>',
        'after_title' => '</h3>',
      ));
    
    }

    特定カテゴリーだけをウィジェットに表示させる方法、またはカテゴリーを除外する方法を教えて頂けると助かります。宜しくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    widget_categories_args フィルターは、カテゴリーブロックには適用されないようです。
    適当なフィルターもないようなので render_block フィルターフックを使用するのはどうでしょうか。

    例:

    add_filter( 'render_block', function( $content, $block ) {
    	if ( 'core/categories' === $block['blockName'] ) {
    		$content = preg_replace( '/<li class="cat-item cat-item-2">[\s\S]*?<\/li>/', '', $content );
    	}
    	return $content;
    }, 10, 2 );
    スレッド開始 chatm

    (@chatm)

    できました!
    いつも教えて頂きまして感謝しております。今回も本当にありがとうございました。

    スレッド開始 chatm

    (@chatm)

    すみません、デバックモードで作業していますが、ウィジェット画面の上部に下記のエラーが出ていました。表面上のサイトの動作には問題ないので、無視してもいいものか、少し気になりますが大丈夫でしょうか。

    「`Notice: wp_enqueue_script() が誤って呼び出されました。
    “wp-editor” script should not be enqueued together with the new widgets editor
    (wp-edit-widgets or wp-customize-widgets).
    詳しくは WordPress のデバッグをご覧ください。
    (このメッセージはバージョン 5.8.0 で追加されました)
    in /home/ドメイン/wp-includes/functions.php on line 5663`」

    このメッセージは今回のカスタマイズとは関係ないと思われます。今回追加したコードを削除して試してみてください。

    • この返信は1ヶ月、 2週前にishitakaが編集しました。
    スレッド開始 chatm

    (@chatm)

    お答えいただきありがとうございます。
    今回のコードを削除しても表示されてましたので、関係なかったですね。すみません!

    気になるので、教えていただいたリンク先にあった、GitHubのハックをfunction.phpに入れて通知を消してしまいました。(下記です)

    remove_filter( 'admin_head', 'wp_check_widget_editor_deps' );
    エラーメッセージは通知されなくなりましたが、
    カテゴリー同士の優先度の設定にYoast SEOなども使っていますので、
    バージョンアップで修正を待ちたいと思います。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。