Display random page

时间:2014-01-19 作者:dire

我想显示一个随机页面:

父页面为X、Y、Z等。不包括标题为“贡献者”的页面。以下代码有效(虽然没有上述特定条件),但the_content 没有显示任何内容。我不确定那里出了什么问题。

fwiw,这是一个模板页,用于一个十三岁的子主题。

<?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(); ?>

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

你列出的第一个条件很简单。你只需要post_parent__in 参数。

$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>\';
  }
}
对于第二个条件,我认为您需要一个过滤器。WP_Query 据我所知,我无法处理这种逻辑。

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>\';
  }
}
使用如上所述,这应该很好。也就是说,如果在查询之前添加过滤器,它将运行并删除自身,只影响一个查询。

SO网友:Gareth Gillman

尝试将页面ID添加到内容中,例如。

the_content($post->ID);

结束

相关推荐

WP_LIST_PAGES更改父项的子项和锚点

我正在获取页面和子页面列表wp_list_pages().我想更改父级<a> 和<ul> 小孩我找到了解决办法here in this WPSE thread.但这只会改变<ul>. 如何将类/属性添加到(<a> 和<ul>) 同时