0

我的问题汇集了很多东西,这很可能是为什么我不能让它为它工作。

我不精通长 SQL 查询,也不是 Wordpress 的忠实粉丝,但我被要求修复特定页面上的排序,为了实现这一点,我需要按自定义属性进行排序。

我试过这个,但没有奏效:

$query = array(
    'post_type' => 'custom_post_type',
    'meta_key' => 'key_for_meta',

    'orderby' => 'STR_TO_DATE(meta_value, "%d/%m/%Y")',
    'order' => 'DESC',
    'first_taxonomy' => $first_taxonomy,
    'second_taxonomy' => $second_taxonomy
);

这将是理想的解决方案,如果有人知道如何完成这项工作,我很想知道。

我已经尝试过,key_for_meta而不是meta_valueorderby并尝试指向正确的 table.column 等等。

经过大量尝试后,我失去了所有希望,并试图创建一个查询。它是这样的:

SELECT p.*,
m.meta_key, m.meta_value, 
tt.taxonomy as s_tax,
t.slug
FROM wp_posts AS p
INNER JOIN wp_postmeta AS m ON p.ID = m.post_id AND m.meta_key = 'key_for_meta'
INNER JOIN wp_term_relationships AS tr ON p.ID=tr.object_id
**INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms AS t ON tt.term_id = t.term_id**

WHERE 1 = 1
    AND wp_posts.post_type = 'custom_post_type'
    AND wp_posts.post_status = 'publish'

    **AND t.slug = '$first_taxonomy'
    AND t.slug = '$second_taxonomy'**

GROUP BY wp_posts.ID
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC";

任何解决方案将不胜感激。我不在乎问题是如何解决的,我只想让它完美地工作。如果它也可以看起来不错,完美,但我放弃了。

日期的格式为 DD/MM/YYYY。根据要求,来自 wp_postmeta 的一些列:

meta_id    post_id    meta_key    meta_value
5101       3521       data_prova  12/01/2013
5114       3526       data_prova  02/03/2013
5165       3554       data_prova  02/03/2013

此外,我还不能让分类法对我所做的查询起作用。

好消息:我让几乎所有东西都能正常工作。唯一的问题是,我无法让它与两种分类法一起使用,但如果我只尝试一种,它就可以工作。

4

1 回答 1

0

所以对于任何有同样问题的人:

我不知道如何只使用 SQL,所以我使用 WordPress 的has_term(). 我的解决方案如下:

SELECT DISTINCT p.*, 
m.meta_key, m.meta_value, 
tt.taxonomy, tt.term_id,
t.slug
FROM wp_posts AS p
INNER JOIN wp_postmeta AS m 
    ON p.ID = m.post_id 
    AND m.meta_key = 'key_for_meta'
INNER JOIN wp_term_relationships AS tr 
    ON p.ID = tr.object_id
INNER JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms AS t 
    ON tt.term_id = t.term_id
WHERE 1 = 1
    AND p.post_type = 'custom_post_type'
    AND p.post_status = 'publish'
    AND (
    t.slug = '$first_taxonomy'
    )
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC

加上这个 PHP 来启动和运行循环:

$posts = $wpdb->get_results($queryRaw);

if ($wpdb->num_rows > 0) {

foreach ($posts as $post) {
    $stored_post = clone $GLOBALS['post'];
    $GLOBALS['post'] = $post;

    setup_postdata($post);
    if (has_term( $first_taxonomy, 'first_taxonomy', $post->ID) && has_term( $second_taxonomy, 'second_taxonomy', $post->ID)) {
    ...

其余的和往常一样。所有方法都有效,因为我正在设置全局$post.

如果其他人有贡献,我会留下这个问题,我很高兴看到更多关于如何处理这个问题的想法,我真的想要一个纯 Wordpress 或至少纯 SQL 解决方案(关于测试我必须使用 PHP)。

于 2013-01-08T20:47:26.853 回答