使用OR关系时的自定义邮序

时间:2015-10-24 作者:Emily

我有一个名为Faculty的自定义帖子类型。它们可以是MCT、MLT或MT类型的任何一种。

MCT -> A, B 
MLT -> C, E 
MT  -> C, D
我想在一页上按姓氏->C、D、e的顺序列出所有MLT和MT教员

我在orderby中使用OR时遇到了一个问题,它返回的是所有MLT或MT或姓氏(即everyone)的教员。AND关系正常工作,只返回C。

我的WP\\u查询参数是:

Array(
    [post_type] => faculty
    [order] => ASC
    [orderby] => meta_value
    [meta_key] => faculty_last_name
    [meta_query] => Array(
            [relation] => OR
            [0] => Array(
                    [key] => faculty_MLT
                    [value] => MLT
                    [compare] => =
                )   
            [1] => Array(
                    [key] => faculty_MT
                    [value] => MT
                    [compare] => =
                )
        )    
)
创建的SQL是:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id INNER JOIN wp_postmeta AS mt1 
ON (wp_posts.ID = mt1.post_id) 
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) 
WHERE 1=1 AND wp_posts.post_type = \'faculty\' AND (wp_posts.post_status = \'publish\' 
OR wp_posts.post_status = \'private\') 
AND (wp_postmeta.meta_key = \'faculty_last_name\' 
-->OR (mt1.meta_key = \'faculty_MLT\' AND CAST(mt1.meta_value AS CHAR) = \'MLT\') 
OR (mt2.meta_key = \'faculty_MT\' AND CAST(mt2.meta_value AS CHAR) = \'MT\') ) 
GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value ASC LIMIT 0, 10
如果将-->或更改为和,查询将返回正确的结果。

是否有某种方法可以将orderby与relation=>一起使用,或者在wp\\u查询中使用?

1 个回复
SO网友:Rarst

这有点难以修补,因为没有数据可以尝试。

令我感到奇怪的是,在您的体系结构中,您将其描述为具有三个可能值的类型,但您有三个(我猜)不同的键。如果你有一把钥匙(比如说faculty_type).

因为这是我最好的猜测,所以我会试图扭转这种状况,并使教员not 而剩下的第三种类型。但不清楚您是否有任何不在任何学院的条目。

相关推荐

WooCommerce在Orders列表的Bulk Actions下拉列表中添加一个新的Bulk Actions

我试图在WooCommerce订单列表中添加一个自定义批量操作,这将是我为单个订单编写的一段代码,但需要使其递归工作。我知道:Custom bulk_action 但它指的是wordpress批量操作菜单,而不是专门针对woocommerce的。你能帮我在我的woocommerce订单列表插件中运行它吗?此外,我还对如何在添加该操作后扫描要检查的订单并仅对所选订单应用批量操作感到有点困惑。