web-dev-qa-db-ja.com

WordPressの管理画面が非常に遅くなったり、新しいページやカスタム投稿を編集または追加するときにタイムアウトする

私はこのサイトに不慣れですが、あなたが与えることができるあらゆる助けに感謝します。

私はWordPressの設定をしていますが、これは(正しいか間違っているかにかかわらず)何百ものページと、何千もの他のカスタム投稿タイプを持っています。

管理者に新しいページまたはカスタム投稿タイプを追加(または既存のものを編集)しようとすると、ページ編集画面が表示されるまでの時間が非常に遅くなります。

通常、属性ボックスマークの周囲でタイムアウトします(時にはページ全体をロードしますが、そうでない場合もありますが、基本的には非常に使用できないかまったく使用できないかのいずれかです)。

私の仮定は、(属性ボックス内の)階層メニューにロードされるべき項目が非常にたくさんあるので、それがタイムアウトを引き起こしているということです。

私はおそらくこのようにたくさんのページを使うことはWPにはおそらく最適ではないことを理解しています、しかしこれはサイトが現在ある状況であり、私はそれを容易に変えることができません。管理者から属性ボックスを隠すことはできません。

長い目で見れば、投稿のみを使用するようにサイトを再構築する必要があるかもしれませんが、WordPressが編集ページを完全にロードするのを手助けする、またはそれをスピードアップするために私ができることはあります。

Htaccess/php.iniのハック(メモリサイズや実行時間の増加のように、私はいくつか試してみましたが、役に立たないようでした)、あるいは他にも試してみることができると思います多分それをキャッシュするためのMYSQL(私は残念ながらこれについては専門家ではありません)

あなたが与えることができるどんな助けでも本当に感謝します

ありがとう、ニック

PSそれはWordPress 3.2.1 PPS私はまたパーマリンク構造を編集しようとしたのでそれは%post-nameを含まないがそれはPPPSを助けなかった私もサイトを複製しWordPress 3.3最新ベータ版にアップグレードしてみたそれでも同じPPPPSこのサイトはRackspace Sites Cloud Serverにあります

また、...属性ボックスを無効にして、管理者のページリスト部分でクイック編集機能を使用して階層を制御しようとしましたが、同じ問題のためにタイムアウトになっているため応答しません。残念なことに、私の一時的な回避策の考えも実際にはそれをしない、と歓声を上げます。

5
Nick Davis

問題は少し他の場所にあります。 WordPressは、post_parent選択ボックスを満たすためにページ階層を構築します。多くのページがある場合、この関数は少し遅くなります(非常に遅い場合があります)。

それであなたはそれについて何ができますか?

以下のコードを使用して、WordPressデフォルトのページ属性メタボックスを無効にできます。

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を設定)、それでも実行できます。カスタムメタボックスを追加し、そこにページのリストを含む選択ボックスを配置します。ただし、(これらのページを選択するための)クエリがより効率的であることを確認する必要があります(階層のないページを一覧表示し、タイトルとpage_idのみ、またはそのようなものを選択します)。

PS。 WPのソースコードを見て、多くのページがあるときに遅くなる理由を確認してください... hierarchical引数をtrueに設定してget_pagesを使用します。それはget_page_childrenを使用し、それは非常に効率的な機能ではありません...

1

これは役に立ちませんが、試しても害はありません...あなたのサーバ管理領域にログインし、データベース管理用のクライアントインタフェース(phpMyAdminなど)を呼び出し、「type」が付いている投稿をすべて削除します。修正してから、テーブルを圧縮します。

あなたが何千ものページを持っているなら、あなたはまたあなたのアクセスを遅くする何百万ものリビジョンを持つかもしれません。

1
user10418

私は同じ号を5000ページ以上発行していたので、かなり時間がかかりました。問題は、wp_dropdown_pages - >全ページのロードを使用したページ属性です。

私はまだテンプレートを使う可能性を必要としていたので、ページ属性を削除するだけでは解決できませんでした。

そして、私はコアファイルを直接ハックするのは好きではないので、私の解決策は自分のバージョンのページ属性(コアファイルから取られた)を削除してから再び有効にすることでした。

// Override of Page Attribute meta box
// This is because the load time of wp_dropdown_pages(), which is removed in our version.
// (original: page_attributes_meta_box() in wp-admin/includes/meta-boxes.php)

// Remove the original meta box
add_action( 'admin_menu', 'custom_remove_meta_box');
function custom_remove_meta_box(){
    remove_meta_box('pageparentdiv', 'page', 'side');
}

// Add our own meta box instead
add_action( 'add_meta_boxes', 'cuustom_add_meta_box');
function custom_add_meta_box() {
    add_meta_box('pageparentdiv', __('Page Attributes') , 'custom_page_attributes_meta_box', 'page', 'side');
}

// Use custom page attributes meta box, no need to load dropdown with pages!
function custom_page_attributes_meta_box($post) {
    if ( 'page' == $post->post_type && 0 != count( get_page_templates( $post ) ) ) {
        $template = !empty($post->page_template) ? $post->page_template : false;
      ?>
        <p><strong><?php _e('Template') ?></strong></p>
        <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label>
        <select name="page_template" id="page_template">
            <option value='default'><?php _e('Default Template'); ?></option>
            <?php page_template_dropdown($template); ?>
        </select>
      <?php
    } 
  ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
  <?php
}
0
Henric