WooCommerce:根据自定义元值更改订单状态

2024-01-04

我尝试每天运行以下函数,以自动完成超过 10 天且具有特定自定义元值的所有处理订单。

我正在使用以下代码片段,但这根本行不通。知道为什么吗?

function autoComplete(){
    $orders = wc_get_orders( array(
            'status' => 'wc-processing',
            'date_created' => '<' . ( time() - 10 * DAY_IN_SECONDS ),
            'meta_key'     => 'status_us',
            'meta_compare' => '=',
            'meta_value'   => 'Sent to USA',
    ) );

    foreach ($orders as $order){
        $order->update_status( 'completed' );
    }
}

if ( ! wp_next_scheduled( 'autoComplete' ) ) {
    wp_schedule_event( time(), 'daily', 'autoComplete' );
} 

我错过了什么错误吗?感谢您的帮助!


你做了很好的尝试,但也犯了一些错误。

以下代码放入您的functions.php.

add_action( 'wp_loaded','start_custom_code' );

// Once everything theme and plugins are loaded we register our cron job.
function start_custom_code() {
    if ( ! wp_next_scheduled( 'bks_mark_processing_order_complete_if_sent_to_usa' ) ) {
        wp_schedule_event( time(), 'daily', 'bks_mark_processing_order_complete_if_sent_to_usa' );
    }
}

add_action( 'bks_mark_processing_order_complete_if_sent_to_usa', 'bks_mark_processing_order_complete_if_sent_to_usa' );

你的函数有小错误bks_mark_processing_order_complete_if_sent_to_usa()

function bks_mark_processing_order_complete_if_sent_to_usa(){
    $args = array(
        'status' => array( 'wc-processing'),
        'limit'  => -1,
        'date_created' => '>' . ( time() - 864000 ), // your mistake 1
        'status_us' => 'Sent to USA', // your mistake 2
    );


    $orders = wc_get_orders( $args );

    foreach ($orders as $order){
        $order->update_status( 'completed' );
        $order->save(); // your mistake 3
    }
};

错误解释

  1. 虽然你的尝试方向正确但是'date_created' => '<' . ( time() - 10 * DAY_IN_SECONDS ),你必须使用>代替<你也没有真正设置DAY_IN_SECONDS您必须将其替换为 86400。因此正确的值是'>' . ( time() - 864000 )。 10天10 * 86400 = 864000。你可以阅读这个解释here https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query#parameters在 WooCommerce 文档中。

  2. 在这里,我为您创建了新的自定义变量,其设置使用woocommerce_order_data_store_cpt_get_orders_query然后查询。需要添加的代码。

function handle_custom_query_var( $query, $query_vars ) {
    if ( ! empty( $query_vars['status_us'] ) ) {
        $query['meta_query'][] = array(
            'key' => 'status_us',
            'value' => esc_attr( $query_vars['status_us'] ),
        );
    }

    return $query;
}

add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'handle_custom_query_var', 10, 2 );
  1. 您更新了状态,但忘记保存。$order->save();

所以总而言之,你必须在你的functions.php中添加以下代码

add_action( 'wp_loaded','start_custom_code' );
add_action( 'bks_mark_processing_order_complete_if_sent_to_usa', 'bks_mark_processing_order_complete_if_sent_to_usa' );


function start_custom_code() {
    if ( ! wp_next_scheduled( 'bks_mark_processing_order_complete_if_sent_to_usa' ) ) {
        wp_schedule_event( time(), 'daily', 'bks_mark_processing_order_complete_if_sent_to_usa' );
    }
}

function bks_mark_processing_order_complete_if_sent_to_usa(){
    $args = array(
        'status' => array( 'wc-processing'),
        'limit'  => -1,
        'date_created' => '>' . ( time() - 864000 ),
        'status_us' => 'Sent to USA',
    );


    $orders = wc_get_orders( $args );

    foreach ($orders as $order){
        $order->update_status( 'completed' );
        $order->save();
    }
};

function handle_custom_query_var( $query, $query_vars ) {
    if ( ! empty( $query_vars['status_us'] ) ) {
        $query['meta_query'][] = array(
            'key' => 'status_us',
            'value' => esc_attr( $query_vars['status_us'] ),
        );
    }

    return $query;
}

add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'handle_custom_query_var', 10, 2 );

上面的代码已经过测试并且可以工作。

Proof: enter image description here

Install WP CRON 插件 https://wordpress.org/plugins/wp-crontrol/检查你的 cron。请参阅上面的屏幕截图。您可以通过点击进行测试Run Now.

Caveat :
当有人访问您的网站时,WP Cron 就会运行。因此,如果没有人访问,?> cron 将永远不会运行。

读这个 :https://wordpress.stackexchange.com/a/179774/204925 https://wordpress.stackexchange.com/a/179774/204925

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WooCommerce:根据自定义元值更改订单状态 的相关文章

  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • php 中 php.ini 的 log_errors 和 error_log

    我正在尝试通过 php ini 更改 php ini 中的设置 我的问题是 当出现错误时 它不会放入文件 error log txt 中 那么我做错了什么 这是我的代码 Settings for php ini ini set sessio
  • Ajax 与 chrome 扩展

    我将 url 发送到 chrome 扩展中的 php 文件 并需要获得响应 但不起作用 清单 json name Get pages source version 1 0 manifest version 2 description Get
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • PHP正则表达式替换链接url

    我需要添加href 之前http 如果这http 不遵循href or src 以下代码部分有效 部分意味着它考虑 a href 只但不src a s i a href target blank gt 0 a str 预先感谢各位的回复 s
  • php/symfony/doctrine 内存泄漏?

    我在使用 symfony 1 4 和原则 1 2 将对象批量插入数据库时 遇到问题 我的模型有一种称为 Sector 的对象 每个对象都有多个 Cupo 类型的对象 通常范围从 50 到 200000 这些物体非常小 只是一个短标识符字符串
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • phpenmod 显示其他 php 版本的路径

    我的 Ubuntu 机器上安装了 php 7 0 和 7 2 当我执行时php v 它告诉我我正在使用 php 7 2 在 Apache 上我还启用了 php 7 2 当我跑步时phpenmode zip 我明白了 WARNING Modu
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • Google Closure 编译器和 multipart/form-data 不起作用

    我正在向 google 闭包编译器 API 服务发出请求 content file get contents file js url http closure compiler appspot com compile post true p
  • 如何捕获反序列化异常?

    PHP 是否可以在以下情况下捕获异常 unserialize 产生错误 一个简单的方法是 ret unserialize foo if ret null Error case 但这不是最现代的解决方案 最好的方法是像前面提到的那样有一个自定
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • PHP 中正确的存储库模式设计?

    前言 我尝试在具有关系数据库的 MVC 架构中使用存储库模式 我最近开始学习 PHP 中的 TDD 并且我意识到我的数据库与应用程序的其余部分耦合得太紧密 我读过有关存储库并使用国际奥委会容器 http laravel com docs 4
  • 如何检测iPhone是否有视网膜显示屏?

    如何检测 iPhone 是否配备视网膜显示屏 有靠谱的办法吗 要么是纯 PHP 要么最好是 Zend Framework 方式来执行此操作 我通过这个弄清楚了 var retina window devicePixelRatio gt 1
  • Google Drive V3、Google API 客户端 2.0 - 批量上传失败

    使用 Google Drive V3 和 API v2 0 主分支进行批量上传失败 我已经修改了https github com google google api php client blob master examples batch
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • SimpleXML 返回空数组

    我正在尝试使用 Google Maps API 和 PHP SimpleXML 获取城市的纬度和经度 我尝试这样做 xml simplexml load file http maps googleapis com maps api geoc
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • Eclipse PDE:自定义 QuickFix 仅在问题视图中可用?

    我在自定义快速修复方面遇到了麻烦 我想在 Eclipse 插件中提供这些修复 并且我希望在 Eclipse PDE 方面比我更有经验的人能够在这个问题上为我提供一些提示 据我了解 我可以通过扩展扩展点来提供自定义的所谓 快速修复 或 解决方
  • PHP != 和 == 运算符

    这让我困惑了一段时间 我正在运行一个目录并回显其内容 并且我想排除 和 文件 现在 这段代码可以工作 if files scandir temp foreach files as file if file OR file else echo
  • 加密 Android 中的现有数据库

    我已经在 Play 商店中发布了一个应用程序 现在 我想加密应用程序的数据库 我知道 Android 版 SQLCipher 可以为我做到这一点 但问题是我的应用程序已经被很多用户使用 并且他们里面有很多未加密的数据 现在 如何将 SQLC
  • .emacs 中的多个自定义设置面和自定义设置变量?

    当我通过M x customize face菜单并将更改保存到磁盘 Emacs 将自动生成的代码添加到我的 emacs文件看起来像这样 custom set faces custom set faces was added by Custo
  • 将 numpy.array 存储在 Pandas.DataFrame 的单元格中

    我有一个数据框 我想在其中存储 原始 numpy array df COL ARRAY df apply lambda r np array do something with r axis 1 但似乎pandas尝试 解压 numpy a
  • Spark:从逻辑计划中提取数据帧

    这行代码将数据帧转换为逻辑计划 val logical df queryExecution logical 我们可以做相反的事情 即从逻辑计划中提取使用的数据帧吗 在 Dataset 对象中有一个方法 def ofRows sparkSes
  • OAuth2/Google CalDAV - 用户日历列表

    我曾经请求 caldav 服务器为给定用户提供所有定义的日历 这适用于 fruux ownCloud Sabre 以及 GCalendar 的经典方法 请求是这样的 method PROPFIND headers Depth 1 urlst
  • 无法加载文件或程序集“WindowsBase,版本 4.0.0.0”

    今天早上买了一台新机器 然后安装了 Visual Studio 2012 这是我启动时遇到的错误 Microsoft Visual Studio Could not load file or assembly WindowsBase Ver
  • 使用 Active Storage 在 active_admin 中上传多个图像

    我发现有关在 activeadmin 中使用 Active Storage 上传图像的有用文章 https medium com maris cilitis using ruby on rails active storage image
  • css : 对当前和上一个元素的悬停效果

    我有很多无序列表 每个列表有 5 里 ul class Rank li li li li li li li li li li ul 我想改变background color当前的li hover元素和所有之前的元素li该列表中的元素 假设
  • 在 C++ 中定义运算符 **

    如何定义运算符 这样它就可以执行 2 个数字的幂运算 例如2 3 它应该给出答案为 8 或者间接地有什么方法可以通过运算符重载而不是 define宏 你不能 您只能重载现有运算符 而不能重载内置类型
  • 处理 TCP 提供程序:错误代码 0x68 (104)

    我正在使用此代码将我的数据库与客户端同步 import pyodbc SYNC FETCH ARRAY SIZE 25000 define connection cursor connection pyodbc connect cursor
  • Wiremock:如何使用 API 将文件上传到文件夹 __files

    wiremock 的文档说我们可以通过以下代码模拟检索文件的请求 request method GET url body file response status 200 bodyFileName path to myfile xml 但现
  • 在MATLAB中读取带有逗号小数分隔符的txt文件[重复]

    这个问题在这里已经有答案了 我有一个这样的txt文件 1 6 2 6 5 5 1000 columns 0 1 4 2 5 1000 rows 即用 代替 作为小数点分隔符 如何在 MATLAB 中正确读取此内容并输出 1 6 2 6 5
  • maven - 使用 Spring 进行接口和实现的单独模块

    我们正在致力于 Maven 化我们的 java 项目 我们希望在每个模块的接口和实现之间建立一个清晰的分离 为此 我们希望将每个模块分成两个子模块 一个用于它们使用的接口和数据对象 另一个用于实现 例如 commons commons ap
  • 我怎样才能做文本计时器

    我想在用户单击 重新发送 时显示 1 分钟的计时器 Text text Re send modifier Modifier clickable color Color Blue 要创建具有 2 种颜色的文本 您需要 annotatedStr
  • 用嵌套对象展平数组

    我有一个包含对象的数组 可以有子对象 子对象与父对象具有相同的结构 基本上只是对象嵌套 我想知道如何展平对象的结构 以便获得所有对象的 id 包括嵌套对象的 id 例如 这个结构 const data id 2 children id 1
  • 使用注释配置的 Spring 控制台应用程序

    我想创建 spring 控制台应用程序 使用 maven 从命令行运行 例如 mvn exec java Dexec mainClass package MainClass 我想要这个应用程序有某种服务和 dao 层吗 我知道如何为 Web
  • ActiveAdmin 表单不保存嵌套对象

    将 ActiveAdmin 与 Rails 4 结合使用 我有两个模型 Document and Attachment它们之间是一对多的关系 models document rb class Document lt ActiveRecord
  • WooCommerce:根据自定义元值更改订单状态

    我尝试每天运行以下函数 以自动完成超过 10 天且具有特定自定义元值的所有处理订单 我正在使用以下代码片段 但这根本行不通 知道为什么吗 function autoComplete orders wc get orders array st