web-dev-qa-db-ja.com

Wp-adminでページ属性ドロップダウンを無効にする方法

で説明したように、WordPressの管理画面が非常に遅くなったり、新しいページを編集したり追加したりするときにタイムアウトする

7,784ページを含むWPサイトでも同様の問題が発生しています。ページ属性ドロップダウンメニューのソースコード内の7kページすべてがレンダリングされるため、編集画面の読み込みが遅くなります。コアを編集する以外に、これに対処するためのより良い方法があるはずです。編集画面上のすべてのページをレンダリングするための欠陥のように思えます。

大容量/トラフィックの他のユーザーからのフィードバックWPサイト

1
Jason Deadrich

ページ属性のサポートを削除すると、そのボックスは表示されなくなります。

function remove_page_attribute_support() {
    remove_post_type_support('page','page-attributes');
}
add_action( 'init', 'remove_page_attribute_support' );

...しかし、属性のサポートが必要かどうかはわかりません。あなたがそうでなければ、それは修正です。

そうした場合、@ KrzysiekDrozdzの答えに従ってボックスを削除する必要がありますが、それらの属性を使用できるようにするには、そのボックスを再構築する必要があります。 オリジナルはこちら 、それはあなたのために働くような方法で。

3
s_ha_dum

remove_meta_box 関数を使うだけです。

if (is_admin()) :
function my_remove_meta_boxes() {
    remove_meta_box('pageparentdiv', 'page', 'side');
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );
endif;

これらのページの階層を設定する必要がある場合(ページにはpost_parentを設定します)、それでもそれを行うことができます。カスタムメタボックスを追加して、そこにページのリストを含む選択ボックスを配置するだけです。

あなたは(これらのページを選択するための)あなたのクエリーがより効率的であることを確かにしなければなりません。階層なしでページを一覧表示し、titleとpage_idのみを選択することができます(元のクエリはDBからすべてのページデータを取得します。ページが多い場合は大量のデータになる可能性があります)。

2

別のオプションは、wp_dropdown_pagesへの呼び出しが行われる前にドロップダウン引数をフィルタリングすることです。この関数はフックを持っています、しかし それは起こります後にクエリが行われた。

フィルタリングできる場所は2つあります。クイック編集モードとページメタボックスです。しかし、Options ReadingやTheme Customizerには利用できません。

enter image description here

以下は著者によるページ制限のデフォルト引数とフィルタの例です(depthchild_ofおよびexlcudeも良い候補のようです)。

/*
$defaults = array(
    'depth' => 0, 
    'show_date' => '',
    'date_format' => get_option('date_format'),
    'child_of' => 0, 
    'exclude' => '',
    'title_li' => __('Pages'), 
    'echo' => 1,
    'authors' => '', 
    'sort_column' => 'menu_order, post_title',
    'link_before' => '', 
    'link_after' => '', 
    'walker' => '',
);
*/

add_filter( 'quick_edit_dropdown_pages_args', 'limit_parents_wpse_106164' );
add_filter( 'page_attributes_dropdown_pages_args', 'limit_parents_wpse_106164' );

function limit_parents_wpse_106164( $args )
{
    $args['authors'] = 'author_name';
    return $args;
}
2
brasofilo