web-dev-qa-db-ja.com

どのようにしてページメタボックスにメニューadminのすべての階層を表示させるのですか?

実行中[WP 3.9.1

たくさんのページとサブページがあります。

メニューを作成しようとすると、たくさんのサブページが正しいレベルで表示されませんが、そうではありません。

これがメタボックスのページの表示方法です

メタボックスのページは、このように表示されるはずです


編集

スクリーンショットの数字はそれについてちょっとごめんなさい。

問題は、最初の数ページ後、すべてのページが同じレベルで表示された後に表示されますが、表示されないことです。

こんな感じ

  • ページ1
    • ページ1のサブページA
    • 1ページのサブページB
      • サブページBのサブページ1
      • サブページBのサブページ2
      • サブページBのサブページ3
  • 2ページ
    • 2ページのサブページA
      • サブページAのサブページ1
      • サブページAのサブページ2
    • 2ページのサブページB
      • サブページBのサブページ1
      • サブページBのサブページ2

...


これが何を引き起こすのか、またはそれをどのように修正するのか、という考えがあるので、メニューを管理できますか?

1
pyverret

修正を見つけました。

ページネーションがメタボックス内のPages階層の表示を壊しているようです。

ナビゲーションメニューのメタボックスでページネーションを無効にするための修正は、次のとおりです。

https://core.trac.wordpress.org/attachment/ticket/18282/18282-disable-nav-menu-pagination.patch

ありがとう

1
pyverret

これまでの回答では、WordPressの新しいバージョンでは変更が上書きされるため、neverというコアWordPressファイルの編集を推奨しています。

オリジナルの Tracチケット#18282 は2011年7月以来公開されていますが、問題はWordPress 4.6にもまだ存在しています - 5年以上続いています。

幸いなことに、WordPressコアをハッキングすることなく動作を変更するための回避策を実装するための「安全な」方法があります。

コアコミッターのSergey Biryukovは、Pagesメタボックスの動作を変更し、投稿タイプと分類法の両方の階層を保持する小さな機能プラグインを書きました。

メニューの編集画面でページ階層と分類階層を維持する

このプラグインは「最新」や「最もよく使われる」ではなく、「すべて表示」タブにのみ影響しますが、コアにパッチを適用したりファイルを直接ハックしたりするよりもはるかに保守性が高く、責任ある解決方法です。

1
rjb

これがあなた自身のテーマのfunctions.phpに適用できる修正です。

add_filter( 'nav_menu_meta_box_object', 'disable_pagination_in_menu_meta_box', 9 );

function disable_pagination_in_menu_meta_box($obj) {
  $obj->_default_query = array(
    'posts_per_page' => -1
  );
  return $obj;
}

更新:デフォルトのフィルタ_wp_nav_menu_meta_box_objectでうまく動作するように、優先順位9で追加する必要があります。

0
Dan Burzo

これは、Wordpress 4.6.1用に更新された、上記のソリューションの私の実装です。

ファイルwp-admin/nav-menu.phpで、次のように、行319から始まる引数 'nopaging'を配列に追加して、関数wp_nav_menu_item_post_type_meta_boxを編集します。

$args = array(
    'offset' => $offset,
    'order' => 'ASC',
    'orderby' => 'title',
    'posts_per_page' => $per_page,
    'post_type' => $post_type_name,
    'suppress_filters' => true,
    'update_post_term_cache' => false,
    'update_post_meta_cache' => false,
    'nopaging' => true // add this argument
);

これにより、メタボックスのページ区切りが無効になり、長いページリストがある場合でも、ページ階層が正しく表示されます。

誰かに役立つことを願っています!