我正在使用高级自定义字段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);
答案 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',
更改排序顺序