Benutzerdefinierte SQL-Abfrage zum Abrufen der Liste der Posts mit der angegebenen Bild-URL

Ich arbeite an einer Aufgabe, wo ich 100s Beiträge unter Single-Seite / Single-Anfrage mit ihren vorgestellten Bildern retrollen muss.

Durch die Verwendung der WordPress-Methode zum Auffinden von Posts und zum anschließenden Retrive des vorgestellten Bildes mit der function get_the_post_thumbnail dauert das Laden der Seite sehr lange.

Kann jemand dafür eine schnellere Lösung wie retrive Beiträge und vorgestellten Bild unter einer einzigen Abfrage bereitstellen. Das sollte den process beschleunigen.

Solutions Collecting From Web of "Benutzerdefinierte SQL-Abfrage zum Abrufen der Liste der Posts mit der angegebenen Bild-URL"

Arbeitete vor kurzem an einem ähnlichen Problem. Hier ist die SQL-Abfrage, um den Beitrag mit Featured Image zu erhalten.

 global $wpdb; $perpage = 10; $page = 1; // Get the current page FROM $wp_query $counter = $perpage * $page; $uploadDir = wp_upload_dir(); $uploadDir = $uploadDir['baseurl']; $sql = " SELECT post.ID, post.post_title, post.post_date, post.category_name, post.category_slug, post.category_id, CONCAT( '".$uploadDir."','/', thumb.meta_value) as thumbnail, post.post_type FROM ( SELECT p.ID, p.post_title, p.post_date, p.post_type, MAX(CASE WHEN pm.meta_key = '_thumbnail_id' then pm.meta_value ELSE NULL END) as thumbnail_id, term.name as category_name, term.slug as category_slug, term.term_id as category_id FROM ".$wpdb->prefix."posts as p LEFT JOIN ".$wpdb->prefix."postmeta as pm ON ( pm.post_id = p.ID) LEFT JOIN ".$wpdb->prefix."term_relationships as tr ON tr.object_id = p.ID LEFT JOIN ".$wpdb->prefix."terms as term ON tr.term_taxonomy_id = term.term_id WHERE 1 ".$where." AND p.post_status = 'publish' GROUP BY p.ID ORDER BY p.post_date DESC ) as post LEFT JOIN ".$wpdb->prefix."postmeta AS thumb ON thumb.meta_key = '_wp_attached_file' AND thumb.post_id = post.thumbnail_id LIMIT ".$counter.",".$perpage; $posts = $wpdb->get_results( $sql, ARRAY_A); 

Bonus : Sie erhalten auch Kategoriedetails mit Post-Details, wenn Sie benötigen.

PS : Sie müssen die Abfrage ein wenig ändern, um Ihre Anforderungen zu erfüllen und gewünschte Felder zu erhalten.

Die Post- und Featured-Bild-URL wird in der wp_posts-Tabelle gespeichert und ihre Beziehung wird in der wp_postmeta-Tabelle gespeichert. In jedem Fall müssen Sie beide Tabellen entweder direkt in einer einzelnen Abfrage oder mit der WordPress-function abfragen und separat abfragen.

Ich denke nicht, dass die Abfrage beider Tabellen in einer einzelnen Abfrage die Hauptleistung verbessert, aber wenn Sie es tun möchten, können Sie den unten angegebenen benutzerdefinierten Code verwenden.

  global $wpdb; $results = $wpdb->get_results( "SELECT * FROM $wpdb->posts, $wpdb->postmeta where $wpdb->posts.ID = $wpdb->postmeta.post_id and $wpdb->postmeta.meta_key = '_thumbnail_id' and $wpdb->posts.post_type='post' limit 100"); if ( $results ) { foreach ( $results as $post ) { setup_postdata( $post ); ?> 

< ?php the_title(); ?>

< ?php if ( $post->meta_value ) { $image = image_downsize( $post->meta_value ); ?> < ?php } } } else { ?>

Not Found

< ?php }

Sie können die Ladegeschwindigkeit der Seite mithilfe der infinite scroll-Methode verwalten. Rufen Sie nur die Post ab, die über der Falte angezeigt wird, und beim Blättern können Sie andere Posts abfragen. Dies kann Ihnen helfen, Ihre Seite viel schneller zu laden. Hier ist ein Tutorial dafür.

https://code.tutsplus.com/tutorials/how-to-create-infinite-croll-pagination–wp-24873

Es gibt einige Plugins für unendlich scroll für Beiträge.

https://wordpress.org/plugins/wp-infinite-scrolling/