【问题标题】:WordPress displaying CPT filtered by custom taxonomyWordPress 显示按自定义分类过滤的 CPT
【发布时间】:2016-04-08 06:28:59
【问题描述】:

我正在显示自定义帖子类型的所有帖子,但我想按分类显示它们。

我希望它看起来像这样:

第一学期:

  • 发布 x
  • 发布

第二学期:

  • 发帖

第三学期:

  • 发布 n

我的计划是为每个分类创建 3 个 wp_queries,因为我有 3 个,但我在设置查询时遇到了一些麻烦。

这是我的查询的样子:

$posts = new WP_Query(array(
        'post_type' => 'job',
        'tax_query' => array(
                    array(
                        'taxonomy' => 'taxonomy',
                        'field' => 'slug',
                        'terms' => 'slug',
                    ),
        ),
        'posts_per_page' => 10
    ));

进行 3 次查询似乎有点愚蠢,有没有更好的方法可以用 1 次查询来做到这一点?

【问题讨论】:

  • 您没有收到任何错误...转到您的 wp-config.php 文件并激活调试模式以查看错误:)
  • @Xenofexs 我已经这样做了,但我仍然没有收到任何错误,我 100% 确定有带有“销售”的帖子
  • @Xenofexs 我想我的问题表述错了我的主要问题是有比使用 3 个查询更简单的方法

标签: php mysql wordpress


【解决方案1】:

你也可以这样做。

 <?php

     $cat = get_terms('category'); // you can put your custom taxonomy name as place of category.
        foreach ($cat as $catVal) {
            echo '<h2>'.$catVal->name.'</h2>';
            $postArg = array('post_type'=>'post','posts_per_page'=>-1,'order'=>'desc',
                              'tax_query' => array(
                                                    array(
                                                        'taxonomy' => 'category',
                                                        'field' => 'term_id',
                                                        'terms' => $catVal->term_id
                                                    )
                            ));

            $getPost = new wp_query($postArg);
            global $post;

            if($getPost->have_posts()){
                echo '<ul>';
                    while ( $getPost->have_posts()):$getPost->the_post();
                        echo "<li>".$post->post_title."</li>";
                    endwhile;
                echo '</ul>';
            }

        }
    ?>

输出

【讨论】:

  • 正是我想要的!非常感谢朋友
  • 嗯,但是你做了 3 次查询,不是吗?
  • 不,我没有使用 3 个查询,不,我已经回答了同样的问题。 stackoverflow.com/questions/36418102/…
【解决方案2】:

您可以选择更多分类

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array( 'quotes' ),
        ),
        array(
            'taxonomy' => 'post_format',
            'field'    => 'slug',
            'terms'    => array( 'post-format-quote' ),
        ),
    ),
);
$query = new WP_Query( $args );

之后,您需要解析一次您的结果以创建一个您想要的数组。

然后你在这个数组上循环显示信息

或者您可以(但我不喜欢这种方式)将您的 html 存储在 php var 中

例 1:

<?php 
      while($posts->have_posts()): $posts->the_post(); ?>
          <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
      <?php
             endwhile;
             wp_reset_postdata();
      ?>


    $jobList = array();


    $posts = $posts->get_posts();

    foreach($posts as $post)
    {
        $jobList[$post['yourTaxFieldName']][] = $post;
    }
    // and you can now loop on $jobList for display in order your jobs categories

Ex 2 :(不好的工作,但它的工作)

$job1 = '';
$job2 = '';
$job3 = '';

while($posts->have_posts()): $posts->the_post();
    if($yourTaxFieldName == 1)
        $job1 .= '<li>'.$your_content.'</li>';
    elseif ($yourTaxFieldName == 2) 
    {
        $job2 .= '<li>'.$your_content.'</li>';
    }
    else {
        $job3 .= '<li>'.$your_content.'</li>';
    }
   endwhile;
   wp_reset_postdata();

echo '<ul><h1>First job : </h1> ',$job1,' </ul>'; 
// etc.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2017-09-08
    相关资源
    最近更新 更多