if语句中的冲突使用!in_category()&& !has_post_format()

时间:2018-04-24 19:13:47

标签: php wordpress

我是WordPress和PHP的新手。我在首页上发布特定帖子时遇到问题(但我不使用静态页面选项,使用index.php)。

我有2个类别(博客和提示),目前,我使用2种格式(标准和旁边)。博客仅分配给标准,而提示仅适用于旁白格式。我希望将它们显示在博客类别&中的帖子中。标准格式。

<?php if ( have_posts()) : ?>

  <div id="ob-grid" class="grid-layout">
    <?php if( !in_category('Blog') && !has_post_format()) : ?>
        <?php $i=1; while (have_posts() && $i<5 ) : the_post();?>
            <?php   get_template_part( 'content', get_post_format() );?>
        <?php $i++; endwhile; ?>
    <?php else : ?>

      <?php while (have_posts()) : the_post();?>
        <?php   get_template_part( 'content', get_post_format() );?>
      <?php endwhile; ?>

    <?php endif; ?>
  </div>
  <?php do_action( 'E2R_posts_navigation' ); ?>

<?php else : ?>
  <?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>

问题是!in_category('Blog') && !has_post_format()相互排斥并进入其他状态(显示所有帖子),我无法找到问题(在我使用之前代替&#39; Blog&#39 ;,&#39;提示&#39;但它也不起作用)。当我在while循环中放入!has_post_format()的条件时,它会正确过滤,但编号则无法正常工作。

帖子格式定义为:

add_theme_support(
  'post-formats', array(
    'aside',
    'image',
    'video',
    'quote',
    'link',
  )
);

1 个答案:

答案 0 :(得分:0)

我通过$ i迭代的位置更改找到了解决这个问题的方法。它看起来像:

           <div id="ob-grid" class="grid-layout">
              <?php if( !is_category('Blog')) : ?>
                  <?php $i=1; while (have_posts() && $i<5 ) : the_post();?>
                    <?php if( !has_post_format()) : ?>
                        <?php get_template_part( 'content', get_post_format() );?>
                        <?php $i++ ;?>
                    <?php endif;?>
                  <?php endwhile;?>
               <?php endif;?>

我回到了这一点:好的,这里显示正确,但帖子的数量不正确(标准博客帖子的数量减去了旁边帖子的数量)。所以我说只有当帖子没有格式时才增加$ i - &gt; !has_post_format() - &gt;是标准的。这个WordPress函数的语法和功能很奇怪。但它对我有用。