Wordpress自定义字段-按值排序的搜索结果
我有一个名为“rating”的自定义字段,其值从1到10。 我想要的是,您可以选择(比如单击按钮或类似的东西)根据评级对搜索结果进行排序 我找到了这个密码。但问题是你不能选择是否通过评级来订购帖子。它会自动订购邮件。 这是我复制并粘贴到functions.php中的代码Wordpress自定义字段-按值排序的搜索结果,wordpress,search,custom-fields,Wordpress,Search,Custom Fields,我有一个名为“rating”的自定义字段,其值从1到10。 我想要的是,您可以选择(比如单击按钮或类似的东西)根据评级对搜索结果进行排序 我找到了这个密码。但问题是你不能选择是否通过评级来订购帖子。它会自动订购邮件。 这是我复制并粘贴到functions.php中的代码 add_filter('posts_join', 'add_join' ); function add_join($pjoin){ global $wpdb; $pjoin .= "LEFT JOIN (
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;
}
如果您使用此代码,只需将?rating=desc添加到您的url,您将看到按降序排列的评分
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' );
非常感谢你!这正是我想要的答案:)