2

我需要一点帮助来订购我的存档页面。我为我的内容类型“activiten”制作了一个自定义 WordPress 存档页面,并将其命名为:archive-activiten.php。并使用“pre_get_posts”操作进行查询。

我的存档模板中有两个查询:

  1. 第一个显示未来事件
  2. 第二个显示过去的事件

我想更改第一个查询的顺序。这样它就会在顶部显示第一个即将发生的事件。

archive-activiten.php 代码:

    <?php
/**
 * The template for displaying Archive pages.
 *
 * Learn more: http://codex.wordpress.org/Template_Hierarchy
 *
 * @package Simon van der Aa
 * @since Simon van der Aa 1.0
 */

get_header(); ?>

<div class="container main">
        <div class="row">
            <div class="span8">
                <section class="komende-activiteiten">
                    <h1 class="page-title">Activiteiten</h1>
                    <?php 
                    while ( have_posts() ) : the_post(); $eventdate = DateTime::createFromFormat('Ymd', get_field('activiteit_datum')); if($eventdate->format('Ymd') >= date('Ymd')) : ?>
                    <article class="agenda-item">
                        <h2><a href="<?php echo get_permalink() ?>" title="<?php echo get_the_title() ?>"><?php echo get_the_title() ?></a></h2>
                        <?php if ( has_post_thumbnail() ) :?>
                            <a href="<?php echo get_permalink(); ?>" title="<?php echo get_the_title(); ?>">
                            <figure class="article-image">
                            <?php the_post_thumbnail('besturen-thumb', array('class' => 'img-rounded')); ?>
                            <?php the_post_thumbnail_caption(); ?>
                            </figure>
                            </a>
                        <?php endif; if ( get_field('activiteit_datum', '') ) : $date = DateTime::createFromFormat('Ymd', get_field('activiteit_datum')); ?>
                            <div class="activiteit-datum">
                                <span class="dag"><?php echo $date->format('d');?></span>
                                <span class="maand"><?php echo $date->format('F');?></span>
                            </div>
                        <?php endif; echo the_excerpt(); if ( get_field('activiteit_inschrijfformulier', '') ) :?><a href="<?php echo get_permalink(); ?>#inschrijven" class="btn">Inschrijven voor de activiteit</a><?php endif; ?>
                    </article>
                    <?php endif; endwhile; ?>
                </section><!-- komende-activiteiten -->
                <section class="geweest-activiteiten">
                    <h2>Geweest</h2>
                    <table class="table table-striped agenda-archief">
                        <thead>
                            <tr>
                                <th>Datum</th>
                                <th>Activiteit</th>
                             </tr>
                        </thead>
                        <tbody>           
                    <?php while ( have_posts() ) : the_post(); $eventdate = DateTime::createFromFormat('Ymd', get_field('activiteit_datum')); if($eventdate->format('Ymd') < date('Ymd')) : ?>
                        <tr>
                          <td><?php echo $eventdate->format('d-m-Y') ?></td>
                          <td><a href="<?php echo get_permalink(); ?>" title="<?php echo get_the_title(); ?>"><?php echo get_the_title(); ?></a></td>
                        </tr>
                        <?php endif; endwhile;?>
                        </tbody>
                    </table>
                </section><!-- geweest-activiteiten -->
                <?php simonvanderaa_content_nav( 'nav-below' ); ?>
            </div><!--/ span8 -->
            <div class="span4">
                <?php get_sidebar(); ?>
            </div><!--/ span4 -->
        </div><!--/ row -->
    </div><!--/ container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

在我的 functions.php 中,我使用以下 pre_get_posts 操作

function my_post_queries( $query ) {
  // do not alter the query on wp-admin pages and only alter it if it's the main query
  if (!is_admin() && $query->is_main_query()){

    // alter the query for the home and category pages 

    if(is_home()){
      $query->set('posts_per_page', 3);
    }

   if ( is_post_type_archive('commissie') ){
           $query->query_vars['posts_per_page'] = 5;
           $query->query_vars['order'] = 'desc';
           return;
       }
   if ( is_post_type_archive('nieuws') ){
           $query->query_vars['posts_per_page'] = 10;
           $query->query_vars['order'] = 'desc';
           return;
       }
   if ( is_post_type_archive('besturen') ){
           $query->query_vars['posts_per_page'] = 1;
           $query->query_vars['order'] = 'desc';
           return;
       }
   if ( is_post_type_archive('faqs') ){
           $query->query_vars['posts_per_page'] = 99;
           $query->query_vars['order'] = 'asc';
           return;
       }

   if ( is_post_type_archive('activiteiten') ){
           $query->query_vars['posts_per_page'] = 10;
           $query->query_vars['orderby'] = 'meta_value';
           $query->query_vars['meta_key'] = 'activiteit_datum';
           return;
       }
  }
}
add_action( 'pre_get_posts', 'my_post_queries' );
4

1 回答 1

1

您需要为您的帖子类型做的第一件事是向参数添加元查询。我不确定您的日期是如何存储的,但我假设它是自 Epoch ('U') 以来的秒数。

$meta_query = array(
                 array(
                    'key'=> 'activiteit_datum',
                    'value'=> date('U'),
                    'compare'=> '>',
                 ),
);
$query->set('meta_query',$meta_query);

以上仅显示未来的帖子,显然您可以使用相反的方式显示过去的事件。

因此,为了将其保留为一个查询,您现在需要一些东西来表明您是否想要未来或过去的事件。在 URL 中使用类似查询参数的东西可能是最好的方法:

if ('true' == $_GET['past']) {
    $compare = '<';
} else {
    $compare = '>';
}

$meta_query = array(
                 array(
                    'key'=>'activiteit_datum',
                    'value'=> date('U'),
                    'compare'=> $compare,
                 ),
);
$query->set('meta_query',$meta_query);

因此,现在http://www.yoursite.co.uk/activiten会显示未来的帖子,而http://www.yoursite.co.uk/activiten/?past=true会显示过去的帖子。

希望对您的解决方案有所帮助。

于 2013-12-14T11:18:49.167 回答