Ich habe meine eigene SQL-Zeichenfolge, um benutzerdefinierte Posts vom Typ Post mit einer bestimmten WHERE-Klausel auszuwählen. Ich habe den Versatz und das Limit verwendet, um je nach angezeigter Seite entsprechende Beiträge zurückzugeben. Das funktioniert gut.
Jetzt möchte ich previous_posts_link()
und next_posts_link()
Funktionen funktionieren lassen. Sie werden beide von get_posts_nav_link
welchen Verwendungen aufgerufen global $wp_query
.
Gibt es eine Möglichkeit, die ich global $wp_query
mit meiner SQL-Zeichenfolge , meinen $wpdb->get_results
Ergebnissen oder etwas anderem neu zuweisen kann? Die nativen previous_posts_link()
und next_posts_link()
WP-Funktionen würden also funktionieren.
Wenn nicht, wie kann ich die Funktionen für den vorherigen und den nächsten Post-Link reproduzieren?
Ich würde mich über jede Hilfe und jeden Rat sehr freuen! Ich bin total festgefahren.
Vielen Dank :)
HINWEIS: Ich habe gerade bemerkt, dass dies previous_posts_link()
auf allen Seiten korrekt funktioniert, aber no idea why
in diesem Fall next_posts_link
funktioniert es nicht: S.
Hier ist der Code:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_per_page = intval(get_query_var('posts_per_page'));
$offset = ($paged - 1)*$post_per_page;
$sql = "
SELECT SQL_CALC_FOUND_ROWS wp_posts.*, wp_postmeta.*
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND wp_posts.post_type = 'movie'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND ((wp_postmeta.meta_key = '_expiry_date' AND CAST(wp_postmeta.meta_value AS DATE) >= '".$current_date."')
OR (mt1.meta_key = '_expiry_date' AND CAST(mt1.meta_value AS CHAR) = ''))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT ".$offset.", ".$post_per_page;
$movies_all_current = $wpdb->get_results( $sql, OBJECT);
if($movies_all_current) {
global $post;
//loop
foreach( $movies_all_current as $key=>$post ) {
setup_postdata($post);
//display each post
//...
} //end foreach ?>
//navigation
<div class="navigation">
<div class="previous panel"><?php previous_posts_link('« newer') ?></div>
<div class="next panel"><?php next_posts_link('older »') ?></div>
</div>
}
quelle
Sehen Sie sich benutzerdefinierte Abfragen an, mit denen Sie den Aufruf von wp_query auf viele interessante und nützliche Arten ändern und die Ergebnisse wieder in Ihr globales Abfrageobjekt übertragen können.
quelle
Anus Antwort erweitern. Anstatt sich auf Ihre benutzerdefinierte SQL-Abfrage zu verlassen, können Sie die WP_Query-Klasse verwenden und WordPress das ganze schwere SQL-Heben überlassen . Dies würde sicherlich Ihr Navigationsproblem lösen.
Beispielabfrage für den Typ eines Filmposts in Ihrem _expiry_date meta_key:
quelle
WP_Query
Klasse verlassen, da ich mein eigenes benutzerdefiniertes SQL erstellen muss. Ich bin am Ende dortVorlage:
quelle
query_posts
und eine mitWP_Query