0

1 から 10 までの値を持つ「評価」と呼ばれるカスタム フィールドがあります。私が望むのは、評価に応じて検索結果を並べ替える (ボタンをクリックするなど)ことを選択できることです。

このコードを見つけました。しかし問題は、投稿を評価順にするかどうかを選択できないことです。投稿を自動的に並べ替えます。これは、コピーして functions.php に貼り付けたコードです。

add_filter('posts_join', 'add_join' );
function add_join($pjoin){
    global $wpdb;
    $pjoin .= "LEFT JOIN (
    SELECT *
    FROM $wpdb->postmeta
    WHERE meta_key =  'rating' ) AS postmeta ON $wpdb->posts.ID = postmeta.post_id";

    return ($pjoin);
}

add_filter('posts_orderby', 'change_sortorder' );
function change_sortorder( $orderby ){
    global $wpdb;
    $orderby = "postmeta.meta_value+0 DESC";
    return $orderby;
}
4

1 に答える 1

1

このコードを使用すると、URL に ?rating=desc を追加するだけで、評価が降順で表示されます。

function register_my_qv() {
global $wp;
$wp->add_query_var( 'rating' );
}
add_action( 'init', 'register_my_qv' );

function map_my_qv( $wp_query ) {
if ( $meta_value = $wp_query->get( 'rating' ) ) {
    $wp_query->set( 'meta_key', 'rating' );
    if($meta_value == 'asc') {
        $wp_query->set( 'orderby', 'meta_value_num' );
        $wp_query->set( 'order', 'asc' );
    } elseif ($meta_value == 'desc') {
        $wp_query->set( 'orderby', 'meta_value_num' );
        $wp_query->set( 'order', 'desc' );
    } else {
        $wp_query->set( 'meta_value', $meta_value );
    }
}
}
add_action( 'parse_query', 'map_my_qv' );
于 2012-04-04T21:42:19.283 に答える