$ wpdb get_results - 从特定类别循环

时间:2018-01-25 10:45:15

标签: php mysql wordpress

我有这个代码,它的工作正常,但它获取所有类别的帖子。我只需要从类别ID 2中获取帖子。我尝试在代码中添加“AND term_taxonomy_id = 2”,但这样做无效。有人可以帮我这个,我的代码:

<?php //loops all posts
                $my_query = $wpdb->get_results
                ("SELECT * FROM `{$table_prefix}posts`, {$table_prefix}postmeta 
                WHERE {$table_prefix}posts.post_status = 'publish' 
                AND {$table_prefix}posts.id = {$table_prefix}postmeta.post_id 
                AND {$table_prefix}postmeta.`meta_key` = 'wpcf-data-nuo' ORDER BY if({$table_prefix}postmeta.`meta_value` = '' or {$table_prefix}postmeta.`meta_value` is null,1,0), {$table_prefix}postmeta.`meta_value` ASC LIMIT 12");
                foreach($my_query as $post) {
                    setup_postdata($post);
            ?>

2 个答案:

答案 0 :(得分:0)

请按照以下代码,希望!它的工作

您可以使用旧方法(我在WP 3.1.1上测试)为orderby参数定义元键...

&#13;
&#13;
query_posts(
    array(  'post_type' => 'services',
            'order'     => 'ASC',
            'meta_key' => 'some_key',
            'orderby'   => 'meta_value', //or 'meta_value_num'
            'meta_query' => array(
                                array('key' => 'order_in_archive',
                                      'value' => 'some_value'
                                )
                            )
    )
);
&#13;
&#13;
&#13;

对我来说,我想通过数字字段订购,我必须使用&#39;输入&#39; =&GT; &#39; NUMERIC&#39;在元查询中。

通常使用命名查询在WordPress 4.2中清除此问题。 e.g。

&#13;
&#13;
$args = array(
  'post_type' => 'services',
  'orderby'   => 'order_clause',
  'meta_query' => array(
       'order_clause' => array(
            'key' => 'order_in_archive',
            'value' => 'some_value',
            'type' => 'NUMERIC' // unless the field is not a number
)));
&#13;
&#13;
&#13;

用于在查询中设置元值的参考链接:https://rudrastyh.com/wordpress/meta_query.html

答案 1 :(得分:0)

您可以通过WP_QUERY来编写自定义查询。

  

如果默认订单参数无法按预期工作,则通过更改WP_QUERY 获取结果然后自定义排序顺序的查询。

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 8,
    'cat' => 2,
    'meta_key' => 'wpcf-data-nuo',
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
);

add_filter('posts_orderby', 'filter_query');
$q = new WP_Query($args);
remove_filter('posts_orderby', 'filter_query');

function filter_query( $orderby_statement ) {
    global $table_prefix;
    $orderby_statement .= " if({$table_prefix}postmeta.`meta_value` = '' ";
    $orderby_statement .= " or {$table_prefix}postmeta.`meta_value` is null,1,0), {$table_prefix}postmeta.`meta_value`";
    return $orderby_statement;
}

注意:请勿从$orderby_statement .=中删除空格,因为在运行查询时需要空格。

如果仍然无效,请在var_dump($orderby_statement);之前添加return $orderby_statement;,然后复制SQL并将其添加到您的问题中,这样有助于我们了解问题所在。