web-dev-qa-db-fra.com

Écran d'administration WordPress très lent/expiration lors de la modification ou de l'ajout d'une nouvelle page/d'un message personnalisé

Je suis nouveau sur le site mais apprécie toute aide que vous pouvez donner.

J'ai une configuration WordPress qui (à tort ou à raison) a des centaines de pages et des milliers d'un autre type de publication personnalisé qui est également basé sur une page (c'est-à-dire hiérarchique).

Lorsque vous essayez d'ajouter une nouvelle page ou un type de publication personnalisé (ou d'en modifier une existante) dans l'administrateur, l'écran de modification de la page se charge très lentement, voire pas du tout.

Habituellement, le délai d'attente autour de la case Attributs est dépassé (parfois, la page entière sera chargée, parfois non, mais au fond, il est extrêmement inutilisable ou totalement inutilisable).

Mon hypothèse est qu’étant donné le nombre important d’articles à charger dans le menu de la hiérarchie (dans la zone Attributs), le délai d’expiration est dépassé.

Je comprends que l'utilisation de tant de pages de cette manière n'est peut-être pas optimale pour WP, mais c'est la situation dans laquelle se trouve le site et je ne peux pas le modifier facilement (et malheureusement, la capacité de placer une page dans une certaine hiérarchie est nécessaire. Je ne peux pas simplement cacher la zone Attributs de l’administrateur).

À long terme, le site doit peut-être être reconstruit pour n'utiliser que des publications. Cependant, je peux faire quelque chose pour aider WordPress à charger la page de modification complètement et/ou à l'accélérer.

Tous les hacks htaccess/php.ini (j'ai essayé quelques-uns, comme augmenter la taille de la mémoire/le temps d'exécution mais ne semblaient pas aider) ou autre chose que vous pensez pouvoir essayer (je suis ouvert à presque toutes les idées), quelque chose dans MYSQL pour le mettre en cache peut-être (malheureusement, je ne suis pas un expert)

Vraiment apprécier toute aide que vous pouvez donner

Merci Nick

PS C’est WordPress 3.2.1 PPS J’ai également essayé d’éditer la structure de permalien afin qu’elle n'inclue pas% post-name mais que cela n’ait pas aidé PPPS. J'ai également essayé de dupliquer le site et de passer à WordPress 3.3 dernière version bêta. mais toujours le même PPPPS Le site se trouve sur un serveur cloud de sites Rackspace

Aussi ... J'ai essayé de désactiver la zone Attributs et d'essayer d'utiliser la fonction Édition rapide de la partie de la liste des pages de l'administrateur pour contrôler la hiérarchie, mais ce n'est pas réactif, car il s'agit d'un "délai d'attente" en raison du même problème. Malheureusement, mon idée de solution temporaire ne fonctionne pas vraiment non plus, bravo.

5
Nick Davis

Le problème est un peu ailleurs. WordPress construit la hiérarchie des pages pour remplir la zone de sélection post_parent. Quand il y a beaucoup de pages, cette fonction peut être un peu lente (parfois très lente).

Alors que pouvez-vous faire à ce sujet?

Vous pouvez désactiver la méta-boîte d'attributs de page par défaut de WordPress à l'aide du code ci-dessous:

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

Si vous devez définir la hiérarchie de ces pages (définissez post_parent pour les pages), vous pouvez toujours le faire. Ajoutez simplement votre méta-boîte personnalisée et placez-y une boîte de sélection avec une liste de pages. Vous devez être sûr que votre requête (pour sélectionner ces pages) est plus efficace (lister les pages sans hiérarchie et ne sélectionner que le titre et l'identifiant de la page, ou quelque chose du genre).

PS Examinez le code source de WP pour voir pourquoi il peut être lent, quand il y a de nombreuses pages ... Il utilise get_pages avec l'argument hierarchical défini sur true. Il utilise alors get_page_children et ce n'est pas une fonction très efficace ...

1
Krzysiek Dróżdż

Cela n’aidera sûrement pas tous les utilisateurs, mais cela ne fera pas de mal de l’essayer… Connectez-vous à la zone d’administration de votre serveur, appelez l’interface client pour l’administration de votre base de données (par exemple, phpMyAdmin), supprimez tous les messages pour lesquels leur type est marqué comme une révision, puis compactez la table.

Si vous avez des milliers de pages, des millions de révisions peuvent également ralentir votre accès.

1
user10418

J'ai eu le même numéro plus de 5000 pages, ce qui a pris beaucoup de temps. Le problème était les attributs de page qui utilisaient wp_dropdown_pages -> chargement de toutes les pages!

Comme j'avais toujours besoin de la possibilité d'utiliser des modèles, seule la suppression des attributs de page n'allait pas le résoudre.

Et comme je n’aime pas pirater directement les fichiers de base, ma solution a été de supprimer puis de réactiver ma propre version des attributs de page (extraite des fichiers de base).

// 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