自定义帖子类型和‘new WP_Query’

时间:2015-11-26 作者:Kacper Knapik

我已经设置了自定义帖子类型“Partnerzy”。在添加新的“合作伙伴”时,您可以选择一个类别(kredyty、leasingi等)。有了这些,我需要在页面上显示它们,如下所示:enter image description here

我发现我所需要做的就是把所有“Partnerzy”帖子按类别分组,最后在网站上显示出来。

我的代码如下所示:

$catArgs = array(
    \'type\'                     => \'post\',
    \'child_of\'                 => 0,
    \'parent\'                   => \'\',
    \'orderby\'                  => \'name\',
    \'order\'                    => \'ASC\',
    \'hide_empty\'               => 1,
    \'hierarchical\'             => 1,
    \'exclude\'                  => \'\',
    \'include\'                  => \'\',
    \'number\'                   => \'\',
    \'taxonomy\'                 => \'category\',
    \'pad_counts\'               => false 

  ); 

 $categoryList = get_categories( $catArgs );

  echo \'Sum: \'.count($categoryList);

for ($i=0; $i < count($categoryList); $i++) {

  echo \'<br>Number of loop: \' . $i;
  echo \'<br>Category name: \' . $categoryList[$i]->name;

  $the_query_partnerzy = new WP_Query( array( post_type=>\'Partnerzy\', category_name=>$categoryList[$i]->name ) );

  echo count($the_query_partnerzy);

  if ($the_query_partnerzy->have_posts()) {

    echo \'I got it!\';
    echo \'<div class="post-list container">\';
    echo \'<p class="post-title">\'. $categoryList[$i]->name .\'</p>\';

    while ($the_query_partnerzy->have_posts()) {

      $the_query_partnerzy->the_post();

      echo the_post_thumbnail();

    } // while

    echo \'</div>\';

  } // query partnerzy

} // for
由于我的类别很少,所以我有一个想法,将其包装在FOR循环中。就这条线而言:

    if ($the_query_partnerzy->have_posts())
更有趣的是。。该行:

echo count($the_query_partnerzy);
实际上是在计算这个查询中的元素,但只显示1(奇怪)。有了这些,我不能再往前走了。

我将感谢任何形式的帮助。

2 个回复
SO网友:s_ha_dum

我真的不知道你想解决什么问题。目前尚不清楚您试图用此代码实现什么,但:

echo count($the_query_partnerzy);

实际上是在计算这个查询中的元素,但只显示1(奇怪)。有了这些,我不能再往前走了。

不,不是。WP_Query 返回一个对象,并count doesn\'t work on Objects, mostly.

实际查询结果位于$the_query_partnerzy->posts 所以count($the_query_partnerzy) 会给你想要的,但是WP_Query 对象已经为您提供了该数据。使用$the_query_partnerzy->found_posts 相反

我稍微整理了一下您的代码,这确实可以使用“post”post类型(因此我可以运行代码并测试它):

$catArgs = array(
  \'type\'                     => \'post\',
  \'child_of\'                 => 0,
  \'parent\'                   => \'\',
  \'orderby\'                  => \'name\',
  \'order\'                    => \'ASC\',
  \'hide_empty\'               => 1,
  \'hierarchical\'             => 1,
  \'exclude\'                  => \'\',
  \'include\'                  => \'\',
  \'number\'                   => \'\',
  \'taxonomy\'                 => \'category\',
  \'pad_counts\'               => false 
); 

$categoryList = get_categories( $catArgs );

echo \'Sum: \'.count($categoryList);

$i = 0;// debugging ?
for ($categoryList as $catl) {
  echo \'<br>Number of loop: \' . $i; // debugging ?
  echo \'<br>Category name: \' . $catl->name;
  $the_query_partnerzy = new WP_Query( 
    array( 
      \'post_type\' =>\'post\', 
      \'category_name\' => $catl->name 
    ) 
  );
  echo $the_query_partnerzy->found_posts; // debugging ?
  if ($the_query_partnerzy->have_posts()) {
    echo \'I got it!\'; // debugging ?
    echo \'<div class="post-list container">\';
    echo \'<p class="post-title">\'. $catl->name .\'</p>\';
    while ($the_query_partnerzy->have_posts()) {
      $the_query_partnerzy->the_post();
      echo the_post_thumbnail();
    } // while
    echo \'</div>\';
  } // query partnerzy
  $i++; // debugging ?
}
注意事项:

标记的线条// debugging ? 最肯定的是应该删除for 您正在使用的循环虽然有效,但在PHP中很少需要。有一个更方便的foreach, 和那个for 循环导致了一些错误,因为(出于我尚未调查的原因)返回的数组get_categories() 开始于1 而不是0. 具有foreach 你不必为此担心

  $the_query_partnerzy = new WP_Query( 
    array( 
      post_type => \'post\', 
      category_name => $catl->name 
    ) 
  );
而不是这样:

  $the_query_partnerzy = new WP_Query( 
    array( 
      \'post_type\' => \'post\', 
      \'category_name\' => $catl->name 
    ) 
  );
虽然这本应该奏效,但它却像愤怒一样发出警告。

您正在从post 但后来,他们试图从具有这些类别的不同帖子类型中提取帖子。您确定类别是为两种帖子类型注册的,并且实际上有符合该逻辑的帖子吗也就是说,代码很好,适合我。

SO网友:Kacper Knapik

多亏了你们,我找到了答案。

这是我的代码:

foreach ($categoryList as $thisCategory) {

  $query = new WP_Query( array( \'post_type\' => \'partnerzy\' ) );

  if ($query->have_posts()) {

    echo \'<div class="post-list container">\';
    echo \'<p class="post-partners-title">\'. $thisCategory->name .\'</p>\';
    echo \'<div class="row">\';

    while ($query->have_posts()) {

      if (in_category($thisCategory->slug, $query->the_post())) {

        echo \'<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12 partner-item">\';
        echo \'<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">\';
        echo the_post_thumbnail();
        echo the_title(\'<span>\', \'</span>\');
        echo \'</div></div>\';

      }

    } // while

    echo \'</div></div>\';

  } else {

    echo \'<br>nope<br><br>\';

  } // query partnerzy

  wp_reset_postdata();

} // foreach
谢谢你的时间。干杯