WordPress : Afficher une page au hasard
Je voudrais afficher une page aléatoire qui :
- a une page parent de X ou Y ou Z, etc.
- exclut les pages avec le titre « Contributeurs »
Le code suivant fonctionne (mais sans les conditions spécifiques ci-dessus), mais the_content n’affiche rien. Je ne sais pas ce qui ne va pas là-bas.
fwiw, ceci est une page modèle pour un thème enfant de Twenty Thirteen.
<?php
/*
Template Name: Random Page
*/
get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
$args = array( 'post_type' => 'page', 'numberposts' => 1, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content online-page">
<?php if($post->post_parent) {
$parent_link = get_permalink($post->post_parent); ?>
<a href="<?php echo $parent_link; ?>" class="parent-link parent-header"><?php
$parent_title = get_the_title($post->post_parent);
echo $parent_title;
?></a>
<?php } ?>
<?php the_content(); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentythirteen' ) . '</span>', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
</div><!-- .entry-content -->
<footer class="entry-meta">
<?php edit_post_link( __( 'Edit', 'twentythirteen' ), '<span class="edit-link">', '</span>' ); ?>
</footer><!-- .entry-meta -->
</article><!-- #post -->
<?php twentythirteen_post_nav(); ?>
<?php endforeach; ?>
<?php wp_reset_query(); ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Solution n°1 trouvée
La première condition que vous énumérez est facile. Vous avez juste besoin des post_parent__in
arguments.
$args = array(
'post_type' => 'page',
'posts_per_page' => 1,
'orderby' => 'rand',
'post_parent__in' => array(2,169), // replace with your IDs
);
$rand = new WP_Query($args);
if ($rand->have_posts()) {
while ($rand->have_posts()) {
$rand->the_post();
the_title();
echo '<br>';
}
}
Pour la deuxième condition, je crois que vous avez besoin d’un filtre. WP_Query
ne peut pas gérer cette logique nativement, pour autant que je sache.
function restrict_post_name_wpse_130401($where) {
remove_filter('posts_where','restrict_post_name_wpse_130401');
return $where.' AND post_title != "Contributors"';
}
add_action('posts_where','restrict_post_name_wpse_130401');
$args = array(
'post_type' => 'page',
'posts_per_page' => 1,
'orderby' => 'rand',
'post_parent__in' => array(2,169), // replace with your IDs
);
$rand = new WP_Query($args);
if ($rand->have_posts()) {
while ($rand->have_posts()) {
$rand->the_post();
the_title();
echo '<br>';
}
}
Utilisé exactement comme ci-dessus, cela devrait fonctionner correctement. Autrement dit, si vous ajoutez le filtre immédiatement avant votre requête, il s’exécutera et se supprimera, n’affectant qu’une seule requête.
0 commentaire