通过将自定义元值与发布日期进行比较来过滤帖子

时间:2016-12-21 作者:jezmck

我有自定义的元字段,delivery_datecollection_date 在WooCommerce订单上。

实际上,我有不同的字段,具有不同格式的相同数据(Y-m-d; U; D d/m/Y) 其中任何一个都可能有用。

我想列出(在管理页面;is_admin() && $query->is_main_query()) 所有无效订单-交货日期或收款日期在postdate.*

我不知道如何创建meta_query如果要比较Posteta值和post值,是否需要使用posts_joinposts_where?

如果我没有解释清楚,我深表歉意。

<小时>edit: 以下MySQL查询获取正确的帖子:

SELECT p.ID, p.post_date, pm.meta_value, pm.meta_key
FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID 
WHERE pm.meta_key = \'_delivery_date_ymd\'
AND pm.meta_value != \'\'
AND pm.meta_value < p.post_date
类似但尚未回答的问题:How can I create a WP_Query that returns posts where one meta_value <= another meta_value

当WooCommerce订阅创建续订订单并逐字复制Posteta时,会发生这种情况。

1 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

我认为下面的解决方案会奏效-

add_action( \'pre_get_posts\', \'the_dramatist_filter_shop_order\' );
function the_dramatist_filter_shop_order( $query ) {

    if( is_admin() && $query->is_main_query() && in_array( $query->get(\'post_type\'), array(\'shop_order\') ) ) {
        add_filter( \'posts_join\', \'the_dramatist_shop_order_query_join\' );
        add_filter( \'posts_where\', \'the_dramatist_shop_order_filter_date\' );
    }
}

function the_dramatist_shop_order_filter_date( $where ){
    global $wpdb;
    $where .= " AND pm.meta_key = \'_delivery_date_ymd\' AND pm.meta_value != \'\' AND pm.meta_value < " . $wpdb->prefix ."posts.post_date";
    return $where;
}

function the_dramatist_shop_order_query_join( $join ){
    global $wpdb;
    $join .= \' RIGHT JOIN \' . $wpdb->prefix . \'postmeta pm ON pm.post_id = \' . $wpdb->prefix . \'posts.ID \';
    return $join;
}

// remove_filter(\'posts_join\', \'the_dramatist_shop_order_query_join\' ); // remove filter because not to effect another query to use after this query.
// remove_filter(\'posts_where\', \'the_dramatist_shop_order_filter_date\' ); // remove filter because not to effect another query to use after this query.
我没有找到任何方法在之后删除此筛选器pre_get_posts 查询已完成。最好在查询完成后删除这些过滤器。但这里也没有必要,因为我们只在shop_order 岗位类型。

希望这有帮助。

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph