是否可以按用户元订购自定义类型的帖子? 在我的自定义类型帖子列表中,我显示用户名和用户电话。 我有用户ID作为我的帖子的元和订购工作。但是,我没有用户手机作为后期元,而是用户元。如何通过用户电话订购我的帖子?
以下是我用于通过帖子meta命名帖子的代码:
function order_columns($vars)
{
if (!is_admin()) {
return $vars;
}
$columns = array(
'user_id',
'expiry_date',
'active',
);
if (isset($vars['orderby']) && in_array($vars['orderby'], $columns)) {
$vars = array_merge($vars, array('meta_key' => $vars['orderby'], 'orderby' => 'meta_value'));
}
return $vars;
}
答案 0 :(得分:0)
由于没有直接的功能来按用户名订购,所以你有2-3次查询。
首先我们必须获取所有user_id
表单postmeta表来执行此操作,您必须编写一个自定义函数来获取user_id
function wh_get_meta_values($key = '', $type = 'post', $status = 'publish') {
global $wpdb;
if (empty($key))
return;
$r = $wpdb->get_col($wpdb->prepare("
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND p.post_status = '%s'
AND p.post_type = '%s' ", $key, $status, $type));
return $r;
}
在functions.php
文件中添加^^。
//getting User ID in sorted manner
$sorted_user_ids = get_users([
'include' => wh_get_meta_values('user_id', 'your_post_type'),
'meta_key' => 'phone', //<- meta key by which you wnat to order
'orderby' => 'meta_value_num',
'order' => 'ASC',
'fields' => 'ID'
]
);
if (!empty($sorted_user_ids)) {
foreach ($sorted_user_ids as $user_id) {
$args = [
'post_type' => 'your_post_type',
'meta_query' => [
'relation' => 'AND',
[
'key' => 'user_id',
'value' => $user_id,
'compare' => '=',
]
]
];
$custom_query = new WP_Query($args);
while ($custom_query->have_posts()) : $custom_query->the_post();
?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php the_content(); ?>
</div>
<?php
endwhile;
wp_reset_postdata(); // reset the query
}
}
希望这有帮助!
答案 1 :(得分:0)
您可以使用函数pre_get_posts
来更改查询和排序方法。
function ta_modify_main_query($query) {
if ($query->is_main_query()) {
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', '_liked');
$query->set('order', 'DESC');
}
}
add_action( 'pre_get_posts', 'ta_modify_main_query' );