【问题标题】:ordering wordpress post_meta - lowest to highest排序 wordpress post_meta - 从最低到最高
【发布时间】:2013-08-05 13:48:53
【问题描述】:

我目前正在遍历所有帖子并显示 post_meta 值,如下所示:

global $wpdb;
$table =  $wpdb->prefix . 'postmeta';
$theid = get_the_id();
$getLowestPrice = $wpdb->get_results("SELECT * FROM $table WHERE meta_value = '$theid'");
foreach ( $getLowestPrice as $post ){

get_post_meta( $post->post_id, '_wholesale_price', false );

}

有没有办法对结果进行排序,最低 -> 最高?目前它们是随机显示的,或者按照输入的方式显示。

【问题讨论】:

  • 你可以像下面这样使用 wp 查询$query = new WP_Query( array ( 'post_type' => 'product', 'orderby' => 'meta_value', 'meta_key' => 'price','order' => 'ASC' ) );
  • 我试过了,这只是得到一个连续循环?
  • 只需将'meta_key' => '_wholesale_price' 放在上面的查询中,而不是'meta_key' => 'price'
  • 这就是我所做的,但它只是不断循环
  • 你能告诉我你的整个页面代码吗?

标签: wordpress metadata


【解决方案1】:

使用下面的代码

<?php 
 global $wpdb;
 $table =  $wpdb->prefix . 'postmeta';
 $theid = get_the_id();
 $getLowestPrice = $wpdb->get_results("SELECT * FROM $table WHERE meta_value = '$theid'");
$all_post = array();
foreach ( $getLowestPrice as $post ){
   $all_post[] = $post->post_id; 

}
$query = new WP_Query( array( 'post__in' => $all_post, 'orderby' => 'meta_value', 'meta_key' => '_wholesale_price','order' => 'ASC') );

// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
    $query->the_post();
    echo '<div>' . get_post_meta( $get_the_ID(), '_wholesale_price', false );() . '</div>';
}
 } else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>`

【讨论】:

    【解决方案2】:

    我觉得这有点不对劲。如果您尝试按元键的值对帖子进行排序(除非我弄错了,这就是您正在做的事情),那么我通常会使用 WP_Query()

    global $wp_query;
    
    $args = array(
      'post_type' => '[YOUR POST TYPE]', 
      'meta_key' => '_wholesale_price', 
      'orderby' => 'meta_value meta_value_num', // meta_value_num for value
      'order' => 'ASC' // or DSC for low/high
    );
    
    $wp_query - new WP_Query( $args );
    
    if ( $wp_query->have_posts() ) {
      while ( $wp_query->have_posts() ) {
        $wp_query->the_post(); 
    
        // Your loop
    
      }
    }
    

    【讨论】:

    • 嗨,乔,我已经尝试过上述方法。显然将帖子类型和内容更改为循环。但我收到一个错误:致命错误:调用非对象上的成员函数 have_posts()
    • iv 设法通过添加 global $wp_query; 来解决这个问题。但不,我得到一个无限循环!?
    • 抱歉,忘记提及全局查询变量。我现在已经添加了这个。您可以将代码粘贴到循环中吗?