自定义WordPress主题不显示类别中的帖子

时间:2019-09-23 作者:Mark

我正在创建一个自定义的Wordpress主题,据我所知,Wordpress应该独立完成按类别、作者等筛选帖子类型的繁重工作。这只是我的index.php 专门针对类别类型。

另一个问题。。。我需要一个archive.php? 我以为Wordpress应该做所有繁重的工作,比如按类别、标签、作者等进行过滤index.php 效果很好,但当我尝试转到特定类别时,它显示了我的所有帖子,而不仅仅是选定的类别,所以我尝试实现archive.php

编辑1:我应该提到我没有使用主循环,因为我使用的是自定义帖子类型

archive.php

<?php
/**
 * @author    Mark Abel
 * @package   client-name/archive
 * @version   1.0
 */
if ( ! defined( \'ABSPATH\' ) ) exit; // Exit if accessed directly
get_header(); ?>

<?php get_template_part( \'partials/partial\', \'sidenav\' );?>

<section class="masonry__container" id="masonry__container">
  <div class="masonry" id="masonry">
    <?php
      $category = get_category( get_query_var( \'cat\' ) );
      $cat_id = $category->cat_ID;
      $loop = new WP_Query( array( \'post_type\' => \'project\', \'cat\' => $cat_id ) );
      if ( $loop->have_posts() ) :
        while ( $loop->have_posts() ) : $loop->the_post(); ?>
          <?php $project_for = get_post_meta($post->ID, "project_for", true); ?>
          <article class="masonry__tile" data-aos="zoom-in">
            <img src=<?php the_post_thumbnail_url(); ?> alt="an image" />
              <div class="masonry__overlay"><div class="masonry__title">
                <?php echo get_the_title() ?>
              </div>
              <div class="masonry__project">
                <?php echo $project_for ?>
              </div>
              <span></span>
              <div class="masonry__cta"><a href="<?php echo get_post_permalink(); ?>">Click to view</a></div>
              <a class="masonry__video" href="https://player.vimeo.com/video/124254859">Play video</a>
            </div>
          </article>
        <?php endwhile;
      endif;
      wp_reset_postdata();
    ?>
  </div>
</section>


</body>

<!-- Footer --> 
<?php get_footer(); ?>

</html>

partial imported by index.php

<?php
/**
 *  @author    Mark Abel
 *  @package   client-name/partials/partial-masonry
 *  @version   1.0
 */
if ( ! defined( \'ABSPATH\' ) ) exit; // Exit if accessed directly
?>

<section class="masonry__container" id="masonry__container">
  <div class="masonry" id="masonry">
    <?php
      $loop = new WP_Query( array( \'post_type\' => \'project\' ) );
      if ( $loop->have_posts() ) :
        while ( $loop->have_posts() ) : $loop->the_post(); ?>
          <?php $project_for = get_post_meta($post->ID, "project_for", true); ?>
          <article class="masonry__tile" data-aos="zoom-in">
            <img src=<?php the_post_thumbnail_url(); ?> alt="an image" />
              <div class="masonry__overlay"><div class="masonry__title">
                <?php echo get_the_title() ?>
              </div>
              <div class="masonry__project">
                <?php echo $project_for ?>
              </div>
              <span></span>
              <div class="masonry__cta"><a href="<?php echo get_post_permalink(); ?>">Click to view</a></div>
              <a class="masonry__video" href="https://player.vimeo.com/video/124254859">Play video</a>
            </div>
          </article>
        <?php endwhile;
      endif;
      wp_reset_postdata();
    ?>
  </div>
</section>

1 个回复
SO网友:Jacob Peattie

我以为Wordpress应该做所有繁重的工作,比如按类别、标签、作者等进行过滤。

确实如此。这就是为什么你不应该这样做:

  $category = get_category( get_query_var( \'cat\' ) );
  $cat_id = $category->cat_ID;
  $loop = new WP_Query( array( \'cat\' => $cat_id ) );
在主模板文件中,您不应该进行自己的查询。使用主回路:

<?php if ( have_posts() ) : ?>
      <?php while ( have_posts() ) : the_post(); ?>
            <!-- etc. -->
      <?php endwhile; ?>
<?Php endif; ?>
存档的目的。php允许您为归档使用不同的模板。不手动查询不同的帖子。唯一的区别应该是内容周围的HTML标记。

相关推荐

Ajax is not working in a loop

我试图使用ajax显示与所选类别相关的数据。它仅适用于最后选定的术语,而不适用于所有选定的术语。任何帮助都将不胜感激。var selected_cat = $(\'#my-categorychecklist input:checked\').map(function() { return this.value }).get(); $(document).ready( function () { var getid = $(\'#my