サポート » テーマ » カスタマイザー内のメニューをカスタマイズ

  • 解決済 krgn

    (@kirig)


    特定の記事1つを、メニューの対象にしたくないので、
    外観>メニュー と カスタマイズ内のメニューで、出てこないようにしたいです。
    外観>メニューのほうは、下記で対応できたのですが、

    function cs_nav_menu_items_page_recent($array){
    if(isset($array)){if(is_array($array)){
    for($i=0;$i<count($array);$i++){
    if($array[$i]->post_type===’page’){
    if((string)$array[$i]->post_name===’tokutei_kiji_title’){unset($array[$i]);break;}
    }}}}
    return $array;
    }
    add_filter(‘nav_menu_items_page’,’cs_nav_menu_items_page_recent’,10,2);
    add_filter(‘nav_menu_items_page_recent’,’cs_nav_menu_items_page_recent’,10,2);

    カスタマイザーの方がfilterが見つかりません、探し方が悪いのでしょうか??
    WP 4.9.6です

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • カスタマイザー(外観)の内部コードに詳しくないので外しているかもしれませんが、フィルターは無さそうに思います。
    探し方としては、このフォーラムにコメントくださる @nobita さんのブログにファイル名(phpとjs)が挙げられているので、その中で apply_filters を探すくらいしか思いつきません。
    https://tenman.info/labo/snip/customizer 内の「カスタマイザーを構成するファイル群」です。

    探してみましたがフィルターはありませんでした。
    wp-includes/class-wp-customize-nav-menus.php の public function load_available_items_query() の中です。次のようなコードになっています。

    // get_posts() で固定ページを取得
    $posts = array_merge( $posts, get_posts( array(
    	'numberposts' => 10,
    	'offset'      => 10 * $page,
    	'orderby'     => 'date',
    	'order'       => 'DESC',
    	'post_type'   => $object,
    ) ) );
    
    // 固定ページを $items[] へ並べる。これが素材になり、カスタマイザーの画面へ表示。
    foreach ( $posts as $post ) {
    	$post_title = $post->post_title;
    	if ( '' === $post_title ) {
    		/* translators: %d: ID of a post */
    		$post_title = sprintf( __( '#%d (no title)' ), $post->ID );
    	}
    	$items[] = array(
    		'id'         => "post-{$post->ID}",
    		'title'      => html_entity_decode( $post_title, ENT_QUOTES, get_bloginfo( 'charset' ) ),
    		'type'       => 'post_type',
    		'type_label' => get_post_type_object( $post->post_type )->labels->singular_name,
    		'object'     => $post->post_type,
    		'object_id'  => intval( $post->ID ),
    		'url'        => get_permalink( intval( $post->ID ) ),
    	);
    }
    

    特定の記事1つを、メニューの対象にしたくないので、

    その記事が以前のトピックに書かれていた「after_setup_themeで必ず投稿される固定ページ」なのでしたら、こんな方法はどうでしょう。
    after_setup_themeより後のタイミングで wp_update_post() を使って固定ページの状態を変更します:

    • 非公開にする。または
    • 予約投稿にする(例:今から1年後)。

    こうすると カスタマイザー > メニュー でも 外観 > メニュー でも表示されなくなります。

    • この返信は5年、 10ヶ月前にgblsmが編集しました。
    トピック投稿者 krgn

    (@kirig)

    頂いたアドバイスから今更ですがcustomize_nav_menu_available_itemsというフィルタ見付けまして、
    対応できることが分かりました。
    色々ありがとうございました。

    フィルターあったんですね。見落としていました、失礼しました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタマイザー内のメニューをカスタマイズ」には新たに返信することはできません。