自定义帖子类型类别页面模板和循环

时间:2018-06-12 作者:The WP Intermediate

我有一个按事件名称定制的帖子类型。

所以像这样为他们创建了一个分类页面→

category-event.php
像这样→

<?php get_header(); ?>
//and then the loop here
<?php get_footer(); ?>
但是,单个类别页面并不是仅从这些类别生成帖子,而是完全从所有帖子生成帖子。

我觉得有什么东西需要在循环中修复?

更新→ 回路

$the_query = new WP_Query( array(
        \'post_type\' => \'event\',
        \'posts_per_page\' => 10,
        \'post_status\' => \'publish\',
        )  );
    ?>
<?php if ( $the_query->have_posts() ) : ?>
    <!-- the loop -->
    <div class="class1">
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <div class="class2">
            <div class="class3">
                <?php $url = esc_url( get_post_meta( get_the_ID(), \'video_oembed\', true ) ); ?>
                <?php $embed = wp_oembed_get( $url ); ?>
                <div class="class4">
                    <iframe id="class_frame" width="560" height="315" src="https://www.youtube.com/watch"); ?>" allowfullscreen frameborder="0"></iframe>
                </div>
            </div>
            <div class="class6">
                <h1><?php the_title(); ?></h1>
                <p><?php the_content(); ?></p>
            </div>
        </div>
    <?php endwhile; ?>
    <?php wp_reset_query(); ?>
    </div>
    <!-- end of the loop -->
    <!-- <?php wp_reset_postdata(); ?> -->
<?php endif; ?>

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

您可以在循环之前更改主查询,但重要的是在循环之后重置主查询。否则,您可能会在其他地方遇到问题。

免责声明:WordPress官方不鼓励这样做here. 然而,根据我的经验,它可以完美地实现你想要的行为。只是别忘了添加wp_reset_query(); 关闭循环后。

<?php query_posts(\'post_type=event\'); ?>
  <?php if ( have_posts() ): while ( have_posts() ): the_post(); ?>

    <!-- Stuff happening inside the loop -->

  <?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
Another approach (稍微复杂一些,但不改变主查询)将是:

<?php $args = array( \'posts_per_page\' => 10, \'post_type\' => \'event\', \'post_status\' => \'publish\' ); ?>
<?php $get_category_posts = get_posts( $args ); ?>
<?php foreach ( $get_category_posts as $post ) : setup_postdata( $post ); ?>

  <!-- Stuff happening inside our custom \'loop\' -->

<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
根据第二种解决方案,your PHP-File should look like this:

<?php get_header(); ?>

<?php $args = array( \'posts_per_page\' => 10, \'post_type\' => \'event\', \'post_status\' => \'publish\' ); ?>
<?php $get_category_posts = get_posts( $args ); ?>
<?php foreach ( $get_category_posts as $post ) : setup_postdata( $post ); ?>

  <div class="class1">
    <div class="class2">
      <div class="class3">

        <?php print_r( get_post_meta( get_the_ID() ) ); // Just for demo purposes ?>

        <?php // $url = esc_url( get_post_meta( get_the_ID(), \'video_oembed\', true ) ); ?>
        <?php // $embed = wp_oembed_get( $url ); ?>

        <div class="class4">
          <iframe id="class_frame" width="560" height="315" src="https://www.youtube.com/watch" allowfullscreen frameborder="0"></iframe>
        </div>
      </div>
      <div class="class6">
        <h1><?php the_title(); ?></h1>
        <p><?php the_content(); ?></p>
      </div>
    </div>
  </div>

<?php endforeach; ?>
<?php wp_reset_postdata(); ?>

<?php get_footer(); ?>
如果这不起作用,可能是您使用了错误的模板文件。如果不知道你的项目,我猜应该是archive-event.php

Update:

结果是taxonomy-event.php 在这种情况下。

SO网友:user3135691

我认为您需要使用模板层次结构。因此,根据自定义帖子类型的信息,类别模板的名称应为:category event。php

当然,为了获得正确的帖子,您还需要有正确的查询(在“category event.php”文件中)。

// Custom Query for CPT \'tires\'
$custom_arguments = array(
    \'post_type\' => \'event\',
    \'posts_per_page\' => \'36\',
    \'taxonomy\' => \'your-event-categories\',
    \'orderby\'=> \'name\',
    \'order\'=> \'ASC\'
);
$loop = new WP_Query($custom_arguments);

$html = \'\';
// Build your HTML output
$html .= \'<div class="event-archive">\';
    while ($loop->have_posts() ) : $loop->the_post();
        $html .= Your HTML Markup to display the content
        $html .= \'<div class="gridbox">\';

        endwhile;
        ....
        wp_reset_query();
我希望这有帮助。

SO网友:honk31

您的问题是,您运行自己的查询,而没有使用main$wp_query. 尝试使用该选项:

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        //whatever 
    endwhile;
endif;
而不是

$the_query->have_posts()

结束

相关推荐

Loop by category and meta_key

我正在尝试为category.php 其中它基于当前类别和元键。但循环坚持显示其他类别的帖子global $taxonomy, $term; $cats = get_the_category(); $newQuery = new WP_Query( array( \'cat\' => $cats[0]->term_id, \'meta_key\' => \'p