组合自定义帖子类型和帖子类别

时间:2013-01-16 作者:kallekillen

如何从自定义帖子类型(“视频”)或循环中的帖子类别(“视频”)查询所有帖子?

我已经使用下面的代码创建了一个查询,将自定义帖子类型中的帖子与普通帖子组合在一起,但我很难用自定义帖子类型和帖子类别实现同样的效果。

<?php $args = array_merge( $wp_query->query, array( \'post_type\' => array( \'post\', \'videos\', ) ) ); query_posts( $args ); ?>     
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
任何帮助都将不胜感激!

我的幻灯片是这样的:

if($query->have_posts()){
while ( $query->have_posts() ) {
    $query->the_post();
    $carousel_slide = \'<li>
               <a href="<?php the_permalink(); ?>">
               <div class="tile-image"><?php the_post_thumbnail(\'tile-small-thumb\'); ?></div>
               <div class="tile-up-arrow"></div>
               <div class="videoslider">Video</div>
               <div class="tile-post-title">
                   <h5><?php the_titlesmall(\'\', \'...\', true, 55); ?></h5>
               </div>
               <div class="hover-display" ></div>
               </a>
           </li>\';
    $found_posts[] = $post->ID;
    $slides[] = $carousel_slide;
}
wp_reset_postdata();
}

首先,我得到Parse error: syntax error, unexpected T_STRING 在…上<?php the_post_thumbnail(\'tile-small-thumb\'); ?> 和aParse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING 在…上<h5><?php the_titlesmall(\'\', \'...\', true, 55); ?></h5>. 删除这些链接会很好地加载页面,但不会将链接呈现为链接,而是呈现为<?php the_permalink(); ?>.

如果我只是做错了,请让我知道,我会继续并结束这个问题。

再次感谢您抽出时间。

2 个回复
最合适的回答,由SO网友:Derk-Jan 整理而成

Must have both

以下参数数组搜索post类型slugvideos 和类别slugvideo. 它不通过设置使用分页posts_per_page 到-1,只返回已发布的帖子。

$args = array(
    \'post_type\' => \'videos\', 
    \'category_name\' => \'video\', 
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\'
  );

Either this or that

如果您试图显示具有post类型或类别slug的post,请使用两个查询,因为它们不能通过参数数组的任何方式组合。

$args = array(
    \'post_type\' => \'videos\', 
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\'
  );

$args = array(
    \'category_name\' => \'video\',
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\'
  );
但是,我注意到您正在使用query_posts(). 如果您试图更改主循环,请不要。请使用pre_get_posts 改为挂钩。如果要查询辅助循环,请使用WP_Query 相反

With WP_Query

function create_slide() {
     return \'<li>
           <a href="\'. esc_attr( esc_url( get_the_permalink() ) ) .\'">
           <div class="tile-image">\' . get_the_post_thumbnail(\'tile-small-thumb\') . \'</div>
           <div class="tile-up-arrow"></div>
           <div class="videoslider">Video</div>
           <div class="tile-post-title">
               <h5>\' . get_the_title() . \'</h5>
           </div>
           <div class="hover-display"></div>
           </a>
       </li>\';
}

$slides = array();
$displayed = array();
$args = array(
    \'post_type\' => \'videos\', 
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\'
);
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
    $displayed[] = get_the_ID();
    $slides[] = create_slide();
endwhile;

$args = array(
    \'category_name\' => \'video\',
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\',
    \'post__not_in\' =>  $displayed,
);

$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
    $displayed[] = get_the_ID();
    $slides[] = create_slide();
endwhile;

wp_reset_postdata();

echo implode(\'\', $slides);

SO网友:Tom J Nowell

要执行OR而不是AND,您需要自定义逻辑,这会很麻烦,但不必要!

不要试图获取帖子和类别,你应该进行两次单独的查询来获取你想要的内容,所以抓取所有视频帖子,将它们放入一个数组中,然后抓取视频类别中的所有帖子,将它们添加到同一个数组中,然后打印出你得到的内容。

有点像把桔子放进购物车,然后把香蕉放进去,而不是没完没了地寻找一个既有桔子又有香蕉的盒子

$slides = array();
$found_posts = array();
// get the video posts
$query = new WP_Query(
    array(
        \'post_type\' => \'videos\',
        \'posts_per_page\' => -1
    )
);
if($query->have_posts()){
    while ( $query->have_posts() ) {
        $query->the_post();
        $carousel_slide = \'put your slide content here, so probably an <li> element or something?\';
        $found_posts[] = $post->ID;
        $slides[] = $carousel_slide;
    }
    wp_reset_postdata();
}

// get the video category
$query = new WP_Query(
    array(
        \'category_name\' => \'video\',
        \'posts_per_page\' => -1
        \'post__not_in\' =>  $found_posts
    )
);
if($query->have_posts()){
    while ( $query->have_posts() ) {
        $query->the_post();
        $carousel_slide = \'put your slide content here, so probably an <li> element or something?\';
        $slides[] = $carousel_slide;
    }

    wp_reset_postdata();
}

// we should now have all our slides in the $slides array so lets print them out

echo implode(\'\',$slides);
您需要修改显示两次的此行:

$carousel_slide = \'put your slide content here, so probably an <li> element or something?\';
因此,它包含了帖子的幻灯片html,所以我想它可能是一个li元素,一些用于获取特色图像的调用,等等,但这超出了这个问题的范围(这是关于查询,而不是如何设置JCarousel幻灯片和特色图像)。

结束

相关推荐

problems exluding categories

我以前做过,但由于某种原因,它不起作用,我也不知道为什么。我只是想从博客页面中排除一些类别。我以为这件事很简单。我有索引。php文件打开,在循环之前,我这样做了 query_posts( $guery_string . \'&cat=-6\' ) if (have_posts)......rest of loop here. 我甚至尝试添加全局$query\\u字符串;最重要的是,我所做的一切都不能摆脱第6类。这种方法在最新版本的wordpress中是否不再有效?