我有这个代码,它的工作正常,但它获取所有类别的帖子。我只需要从类别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);
?>
答案 0 :(得分:0)
请按照以下代码,希望!它的工作
您可以使用旧方法(我在WP 3.1.1上测试)为orderby参数定义元键...
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;
或强>
对我来说,我想通过数字字段订购,我必须使用&#39;输入&#39; =&GT; &#39; NUMERIC&#39;在元查询中。
通常使用命名查询在WordPress 4.2中清除此问题。 e.g。
$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;
用于在查询中设置元值的参考链接: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并将其添加到您的问题中,这样有助于我们了解问题所在。