Wordpress:按用户元订购帖子

时间:2017-02-11 12:35:26

标签: php wordpress custom-post-type posts

是否可以按用户元订购自定义类型的帖子? 在我的自定义类型帖子列表中,我显示用户名和用户电话。 我有用户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;
}

2 个答案:

答案 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' );