Das WordPress-Dashboard, in dem CPT angezeigt wird, führt zu 504


10

Ich habe einen benutzerdefinierten Beitragstyp mit einer benutzerdefinierten Taxonomie erstellt. Ich habe ungefähr 1500 Beiträge, die alle einer Art Taxonomie-Begriff zugeordnet sind ... einige sind mehr als 200 Begriffen zugeordnet.

Ich habe festgestellt, dass das Anzeigen der benutzerdefinierten Beitragstypen über das Dashboard sehr lange dauert, was meistens zu einem 504-Gateway-Timeout führt.

Das Abfragen dieser Beiträge vom Frontend aus ist in Ordnung und ich habe keine Probleme damit.

Nach meinem Verständnis versucht das Dashboard beim Anzeigen dieser benutzerdefinierten Beitragstypen, alle jedem Beitrag zugewiesenen Informationen abzurufen, bevor alles angezeigt wird.

Ich habe dieses WP-Installationsset so eingestellt, dass es so viel Speicher wie nötig verwenden kann (memory_limit = -1), während ich recherchierte. Einige sagten, es könnte speicherbezogen sein.

Kann ich etwas tun, um die Leistung dieser Abfrage zu steigern? Laden Sie möglicherweise nicht alle Taxonomiebegriffsbeziehungen eines Posts, bis Sie den Post bearbeiten?

Fehler nach Erhöhung WP_MEMORY_LIMITvon 1 GB auf 2 GB:

WordPress database error: [MySQL client ran out of memory]
SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('locations') AND tr.object_id IN

WordPress database error: [Lost connection to MySQL server during query]
SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN

WordPress database error: [MySQL server has gone away]
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM wp_posts WHERE post_type = 'services' ORDER BY post_date DESC

FWIW, ich habe den Speicher meiner WordPress-Site auf 2 GB erhöht und dadurch die Beiträge sehen können, aber ich bekomme eine Reihe von Fehlern (zur ursprünglichen Frage hinzugefügt). Gibt es etwas, das getan werden kann, um die Abfrage im Backend nicht so schwer zu machen?
NW Tech

Wenn Sie erwähnen, dass die benutzerdefinierten Beitragstypen im Dashboard angezeigt werden, beziehen Sie sich auf die Anzeige der Liste der Beiträge unter wp-admin/edit.php?post_type=services?
bosco

@ Bosco Das ist richtig.
NW Tech

Das ist eine Menge Speicher, der Wordpress zugewiesen werden muss. Sind Sie auf Shared Hosting, einem VPS oder einem dedizierten Server? Hier könnte es tiefere zugrunde liegende Probleme geben. Verwenden Sie Apache oder einen anderen Webserver wie Nginx (vielleicht beides)?
Dwayne Charrington

Dies ist ein neuer Server (dv) mit MediaTemple. Das Control Panel ist Plesk und auf dem Server wird CentOS mit Apache und Nginx ausgeführt. Ich möchte nicht so viel Speicher zuweisen, aber es schien der einzige Weg zu sein, Ergebnisse zu erzielen.
NW Tech

Antworten:


4

Die CPT- und Taxonomiebegriffe werden über das Plugin erstellt. Ich konnte die Abfrage verringern, indem ich meinem Plugin Folgendes hinzufügte:

add_action( 'pre_get_posts', 'nwtd_lpfs_custom_admin_query' );
function nwtd_lpfs_custom_admin_query( $query ) {
    if( !is_admin() && !$query->is_main_query() ) {
         return;
     }
     if( is_post_type_archive( 'services' ) ) {
          $query->set('no_found_rows', 1 );
          $query->set('update_post_meta_cache', 0 );
          $query->set('update_post_term_cache', 0 );
     }
}

Derzeit habe ich mehr als 700 Beiträge, die an mehr als 1500 Taxonomiebegriffe gebunden sind, und alles funktioniert hervorragend. Die Beiträge werden fast augenblicklich angezeigt.

** Ich habe diesen Code nicht geschrieben. Jemand, mit dem ich direkt zusammenarbeite und der nicht Teil der WordPress Answers-Community ist, hat den Code bereitgestellt - vielleicht kann er jemand anderem helfen, oder jemand anderes kann ihn möglicherweise erweitern, um ihn effizienter zu gestalten. ** **.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.