繁体   English   中英

如何在WordPress发布查询中添加类别过滤器

[英]How to Add Category Filter in WordPress Post Query

我使用此代码过滤了边栏中的帖子,

$mostlikequerystr = "
SELECT $wpdb->posts.* 
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_key = 'most_liked' 
AND $wpdb->posts.post_status = 'publish' 
AND $wpdb->posts.post_type = 'post'
ORDER BY $wpdb->postmeta.meta_value DESC
    LIMIT 0 , 10";

此代码工作完美,但现在我也想添加类别过滤器。

为此,我用了$ term_id

global $wpdb;
$term_id = get_term_by('slug','trailers');
$term_id->term_id;
echo $term_id;//Prints 12 
$mostlikequerystr="SELECT $wpdb->posts.*  FROM $wpdb->posts,$wpdb->postmeta
INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.$wpdb->taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE ($wpdb->term_taxonomy.term_id = $term_id 
AND $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_key = 'most_liked'
AND $wpdb->term_taxonomy.taxonomy = 'categories'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_status = 'publish')
        LIMIT 0 , 10";

        $tariler_post = $wpdb->get_results($mostlikequerystr, 'OBJECT');
         echo $wpdb->show_errors();

但它对我不起作用,也没有错误...

您在WHERE子句中缺少条件运算符

WHERE ($wpdb->term_taxonomy.term_id = $term_id here
                                               ^^^^^
    $wpdb->posts.ID = $wpdb->postmeta.post_id 

通过添加AND尝试这一操作

$mostlikequerystr = "
SELECT $wpdb->posts.*  FROM $wpdb->posts,$wpdb->postmeta
INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.$wpdb->taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE ($wpdb->term_taxonomy.term_id = $term_id 
AND $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_key = 'most_liked'
AND $wpdb->term_taxonomy.taxonomy = 'categories'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_status = 'publish'
ORDER BY $wpdb->postmeta.meta_value DESC
)
        LIMIT 0 , 10";

如果您使用的是WPDB类,请尝试捕获错误

<?php $wpdb->show_errors(); ?> 

您可以通过其他方式使用WP的内置功能

$args = array(
'posts_per_page' => 10,
'post_type' => 'post',
'post_status' => 'publish',
'meta_query' => array(
 array(
        'key' => 'most_liked',
        'value' => '',
        'compare' => '!='
    ),
'category__in' => 'id here or skip this argument'
'orderby' => 'meta_value_num',
);
$tariler_post=new WP_Query($args);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM