カスタマイザー(外観)の内部コードに詳しくないので外しているかもしれませんが、フィルターは無さそうに思います。
探し方としては、このフォーラムにコメントくださる @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年後)。
こうすると カスタマイザー > メニュー でも 外観 > メニュー でも表示されなくなります。
-
この返信は6年、 4ヶ月前にgblsmが編集しました。
トピック投稿者
krgn
(@kirig)
頂いたアドバイスから今更ですがcustomize_nav_menu_available_itemsというフィルタ見付けまして、
対応できることが分かりました。
色々ありがとうございました。
フィルターあったんですね。見落としていました、失礼しました。