Wordpress通过自定义字段自定义$ wpdb查询顺序

时间:2015-04-27 12:28:23

标签: php mysql wordpress

我正在使用高级自定义字段wordpress插件和一个名为“相册”的自定义帖子类型 在自定义帖子类型中,我有2个自定义字段 一个是名为“album_artists”的“user”字段,它将带有用户ID的数组存储到数据库中。
另一个是名为“release_date”的字段,它将时间戳存储到数据库中并且是必填字段。

现在,在authors.php中,我在“album_artists”字段中获得包含当前作者ID的所有“专辑”部分。到现在为止还挺好。我通过自定义查询来管理这个问题,该查询在“album_artists”字段的序列化数组中查找\“{userID} \”,并且我能够获得我想要的帖子。但是现在我想通过其他自定义字段(“release_date”)值及其中的时间戳来订购专辑帖子(目前按发布日期排序)。

是否可以使用单个SQL查询或是否有任何其他想法来实现此目的?这是我的自定义查询:

global $wpdb;
$results = $wpdb->get_results("
        SELECT * FROM $wpdb->posts WHERE `ID` IN (
            SELECT `post_id`
            FROM $wpdb->postmeta
            WHERE `meta_key` LIKE 'album_artists'
            AND `meta_value` LIKE '%\"{$curauth->ID}\"%'
        )
        AND `post_type` LIKE 'albums'
        AND `post_status` LIKE 'publish'
        ORDER BY 'post_date' ASC
", OBJECT);

2 个答案:

答案 0 :(得分:0)

我可以再次加入postmeta以获取meta_value meta_key release_date的日期,因为meta_value类型是您需要投放的文字字符串日期值,以便它成为MySQL的日期对象,并可用于排序结果,在STR_TO_DATE中提供您当前的字符串日期格式,如果日期存储为04/26/2015,则格式为'%m/%d/%Y'

SELECT DISTINCT p.*
FROM $wpdb->posts p
JOIN $wpdb->postmeta m ON p.`ID` = m.post_id
JOIN $wpdb->postmeta m1 ON p.`ID` = m1.post_id
WHERE m.`meta_key` LIKE 'album_artists'
AND m.`meta_value` LIKE '%\"{$curauth->ID}\"%'
AND m1.`meta_key` LIKE 'release_date'
AND p.`post_type` LIKE 'albums'
AND p.`post_status` LIKE 'publish'
ORDER BY STR_TO_DATE(m1.meta_value, '%m/%d/%Y') ASC

答案 1 :(得分:0)

我建议您使用带有元键/值的WP_Query来执行此操作。这是我的代码,只是测试它。

$args = array(
'post_type' => 'album',
'orderby' => 'meta_value',
'meta_query' => array(array('key' => 'release_date')),
'order' => 'ASC',
'paged'=>$paged,
'meta_query' => array(
    array(
        'key'     => 'album_artists',
        'value'   => $curauth->ID,
        'compare' => 'LIKE',
    ),
),
);

您可以使用'order' => 'ASC','order' => 'DESC',更改排序顺序