当前位置: 首页 > 知识库问答 >
问题:

WC_Order_Query,其中元数据不存在或不等于

邢小云
2023-03-14

我正在尝试从数据库中查询所有订单,其中自定义post元字段没有设置,或者不等于'yes'。看来我无法使它正常工作。

我有这个:

$query = new \WC_Order_Query([
    'date_completed' => $range,
    'x_days_follow_up_email' => 'yes' // Note: Compares '!='
]);

然后将此链接到woocommerce_order_data_store_cpt_get_orders_query:

if (!empty($query_vars['x_days_follow_up_email'])) {
    $query['meta_query'][] = [
            'key' => 'x_days_follow_up_email',
            'value' => esc_attr($query_vars['x_days_follow_up_email']),
            'compare' => '!='
        ]
    ];
}

return $query;

这不会得到任何回报。如果我将compare更改为==,它将返回meta设置为'yes'的订单。所以我想我可能必须包含not exists,如下所示:

if (!empty($query_vars['x_days_follow_up_email'])) {
    $query['meta_query'][] = [
        'relation' => 'OR',
        [
            'key' => 'x_days_follow_up_email',
            'value' => esc_attr($query_vars['x_days_follow_up_email']),
            'compare' => '!='
        ],
        [
            'key' => 'x_days_follow_up_email',
            'compare' => 'NOT EXISTS'
        ]

    ];
}

return $query;

可悲的是,这也行不通。我可以为此编写自己的WP_Query,但有很多订单,我发现查询需要花费很长时间。我的代码中的$range基本上是11-8天前的所有订单。并且我只想要没有元x_days_follow_up_email的订单,或者当该元设置但未设置为yes时。

看来应该是可以的?值得注意的是,它以前是工作的,但在更新后突然停止工作,原因不明:

$query = new \WC_Order_Query([
    'date_completed' => $range,
    'meta_key' => 'x_days_follow_up_email',
    'meta_value' => 'yes',
    'meta_compare' => '!='
]);

似乎很简单,但我似乎不能让它发生。

共有1个答案

楚硕
2023-03-14

更新-您需要一些额外的代码来处理自定义元数据,如:

add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'order_data_store_custom_query_var', 10, 2 );
function order_data_store_custom_query_var( $query, $query_vars ) {
    if ( ! empty( $query_vars['xdays_fup'] ) ) {
        $query['meta_query'][] = array(
            'key'     => 'x_days_follow_up_email',
            'value'   => esc_attr( $query_vars['xdays_fup'] ),
            'compare' => '!=',
        );
    }

    return $query;
}

然后将查询更改为:

$query = new \WC_Order_Query([
    'date_completed' => $range,
    'xdays_fup' => 'yes'
]);

应该管用。

 类似资料:
  • 问题内容: 我在Python 2.7中使用selenium,并且有以下代码,但是我正在寻找一种更有效的方法: 问题答案: 您无需使用一段时间。它已经等待您在WebDriverWait()函数中显示的时间。

  • 问题内容: 我正在编写我的第一个烧瓶应用程序。我正在处理文件上传,基本上我想要的是读取上传文件的数据/内容而不保存它,然后将其打印在结果页面上。是的,我假设用户始终上传一个文本文件。 这是我正在使用的简单上传功能: 现在,我正在保存文件,但是我需要的是一个’a’变量来包含文件的内容/数据。 问题答案: 包含字段。该对象必须扩展IO或文件对象,因此它必须包含read和其他类似方法。还扩展了strea

  • 我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以在数据库中再创建3列(category\u 1、category\u 2、category\u 3)对我来说并不算多。 我想象在插入的时候,不是保存在3个不同的列中,而是将数组保存到一个“categories”列中。 我的问题是,在获得信息的那一刻。如果我这样做了,比如说搜索每个有一个特定类别的记录,那么什

  • 问题内容: 我正在测试一个UI,在该UI中用户单击“删除”按钮,而表条目消失。因此,我希望能够检查表条目是否不再存在。 我曾尝试使用invert ,希望它的意思是“期望不存在指定的元素”。我的代码是这样的: 但是,我发现即使这样做,我也因一个说法说元素“ foo”不存在。当然,我想要的是没有这样的元素,但是我不希望引发异常。 那么,如何等待直到元素不再存在?我希望有一个示例,该示例尽可能不依赖于捕

  • 我正在测试用户单击删除按钮和表条目消失的UI。因此,我希望能够检查表条目是否不再存在。 我已经尝试使用< code > expected conditions . not()来反转< code > expected conditions . presenceofelementlocated(),希望它意味着“期望不存在指定的元素”。我的代码是这样的: 但是,我发现即使这样做,我也会得到一个由引起的

  • 我正在为我的API构建一些简单的负载测试,为了确保一切正常,我还想查看响应标头和数据。但是当我使用命令行运行测试,然后重新打开GUI以添加查看结果树侦听器并加载创建的文件时,响应标头或响应数据为空。 我在user.properties中输入了以下值(也尝试在jmeter.properties中取消这些值的注释并在那里更改它们,结果相同) 但在打开结果文件时仍然没有运气。我尝试在 -l 标记之后将文