J'ai ma propre chaîne SQL pour sélectionner les publications de type de publication personnalisé avec une clause WHERE spécifique. J'ai utilisé le décalage et la limite pour renvoyer les messages appropriés en fonction de la page affichée. Ça marche bien.
Maintenant, je voudrais faire fonctionner previous_posts_link()
et les next_posts_link()
fonctions. Ils sont tous deux appelés à partir de get_posts_nav_link
quelles utilisations global $wp_query
.
Existe-t-il un moyen de réaffecter global $wp_query
ma chaîne SQL ou mes $wpdb->get_results
résultats ou autre chose? Ainsi, les fonctions natives previous_posts_link()
et next_posts_link()
WP fonctionneraient.
Sinon, comment puis-je reproduire les fonctions de lien précédent et suivant?
J'apprécierais vraiment toute aide et conseil! Je suis totalement coincé avec ça.
Merci :)
REMARQUE: je viens de remarquer que cela previous_posts_link()
fonctionne correctement sur toutes les pages, mais no idea why
dans ce cas, pourquoi next_posts_link
ne fonctionne pas: S
Voici le 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>
}
la source
Jetez un œil aux requêtes personnalisées - qui vous permettent de modifier l'appel wp_query de nombreuses façons intéressantes et utiles, et de repousser les résultats dans votre objet de requête globale.
la source
Développant la réponse d'Anu. Au lieu de vous fier à votre requête SQL personnalisée, vous pouvez utiliser la classe WP_Query et laisser WordPress gérer tout le gros du SQL. Cela résoudrait sûrement votre problème de navigation.
Exemple de requête pour le type de publication de film dans votre méta-clé _expiry_date:
la source
WP_Query
classe car j'ai besoin de construire mon propre SQL personnalisé. J'y suis arrivé à la fin, voir ma réponse si intéressé :)Modèle:
la source
query_posts
et une avecWP_Query