Est-il possible de définir le poste $ var en dehors de la boucle?
Question
Je suis en train d'accélérer un site wordpress en condensant trois wp_queries en un seul. J'ai besoin de catégories séparées, donc je fais l'appel et la définition 3 tableaux pour maintenir le poste à l'aide d'un interrupteur, comme suit:
$new_query = new WP_Query();
$new_query->query('post_type=post&paged='.$paged);
if ( $new_query->have_posts() ) : while ( $new_query->have_posts() ) : $new_query->the_post();
$category = choose_one_category(get_the_category());
switch ($category){
case "Category 1":
$cat1[] = $post;
break;
case "Category 2":
$cat2[] = $post;
break;
case "Category 3":
$cat3[] = $post;
break;
}
endwhile; endif;
Ce qui me laisse avec 3 tableaux qui, avec les postes bien triés. Maintenant, je souhaite définir la variable DEHORS $ post la boucle afin que je puisse utiliser des méthodes comme the_date()
& comments_number()
sans avoir à réécrire ces fonctions, quelqu'un peut-il aider?
J'ai essayé:
foreach ($centre as $new_post){
$post = $new_post;
include('front_page_loop.php');
}
Où front_page_loop.php
est mon code de boucle, mais je reçois juste le même poste, mais avec des dates différentes
La solution
Je pense que la fonction setup_postdata($post)
(interne) le fait. Je réussi à trouver la documentation appropriée; dans le Codex (typique), mais il y a des exemples avec ici et là comme Afficher les messages L'utilisation d'un personnalisé Sélectionnez la requête.
Cet extrait de test semble fonctionner très bien par exemple le code que vous avez en question:
foreach ( $cat1 as $post ) {
setup_postdata($post);
printf( 'Post "%s" was posted %s ago<br />',
get_the_title(),
human_time_diff( strtotime( get_the_date() ) )
);
}