每当cron运行以自动续订我的客户订单时,我都会在错误日志中获取此内容。
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: Stack trace:, referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #0 [internal function]: WC_Subscriptions_Payment_Gateways::gateway_scheduled_subscription_payment(), referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #1 /var/home/hybrid/completehumanperformance.com/www/wp-includes/class-wp-hook.php(298): call_user_func_array('WC_Subscription...', Array), referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #2 /var/home/hybrid/completehumanperformance.com/www/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters('', Array), referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #3 /var/home/hybrid/completehumanperformance.com/www/wp-includes/plugin.php(515): WP_Hook->do_action(Array), referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #4 /var/home/hybrid/completehumanperformance.com/www/wp-cron.php(117): do_action_ref_array('woocommerce_sch...', Array), referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: #5 {main}, referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
[Wed Nov 22 06:45:01 2017] [error] [client 204.187.12.186] FastCGI: server "/php-completehumanperformancecom.fpm" stderr: thrown in /var/home/hybrid/completehumanperformance.com/www/wp-content/plugins/woocommerce-subscrip..., referer: http://completehumanperformance.com/wp-cron.php?doing_wp_cron=1511361900.1951580047607421875000
摘要:Missing argument 1 for WC_Subscriptions_Manager::prepare_renewal()
我已经使用称为WP_CRONTROL的插件创建了CRON,wing_name: woocommerce_scheduled_subscription_payment
。
在WP crontrol面板中,您确实可以选择通过参数 - 我尝试添加$subscription_id
(这是代码要求的),但没有任何作用。
所以问题是 - 如何获得Cron的工作来处理DB中的所有内容?我缺少什么配置?
谢谢
免责声明:我从一个自行维护的客户那里继承了这一点。就像我到达这里的时候一样,guv!
根据WooCommerce订阅管理器Git Repo,这是它正在尝试运行的功能:
/**
* Sets up renewal for subscriptions managed by Subscriptions.
*
* This function is hooked early on the scheduled subscription payment hook.
*
* @param int $subscription_id The ID of a 'shop_subscription' post
* @since 2.0
*/
public static function prepare_renewal( $subscription_id ) {
$order_note = _x( 'Subscription renewal payment due:', 'used in order note as reason for why subscription status changed', 'woocommerce-subscriptions' );
$renewal_order = self::process_renewal( $subscription_id, 'active', $order_note );
// Backward compatibility with Subscriptions < 2.2.12 where we returned false for an unknown reason
if ( false === $renewal_order ) {
return $renewal_order;
}
}
您可以从中看到它必须收到一个参数,这是整数,必须与shop_subscription ID相对应。
因此,您将要做一些事情来正确解决此问题。我要假设您不想太多地挖掘命令行调试,因此您不会意外地解雇可能以意想不到的方式改变事物的cron工作(通常是一个避免时的好主意,尤其是当它涉及时,其他人的钱)。
- 首先,请确保使用
define( 'WP_DEBUG_LOG', true );
启用错误日志 - 第二,您需要记录
$subscription_id
的值,因为它将其传递给作业时存在。
woocommerce_scheduled_subscription_payment
钩中的类似内容:
error_log(sprintf('Parameter [%s] with type [%s] is the [$subscription_id], as passed to the job: [%s]', (string) $subscription_id, gettype( $subscription_id), 'WC_Subscriptions_Manager::prepare_renewal' ) );
这应该拾取正在传递的ID并将其放入错误日志中。接下来,等待工作再次运行或手动运行。
工作运行后,您需要检查以下内容:
- 该消息显示在您的日志中(duh)
-
$subscription_id
的值是整数,不是null或false。 -
$subscription_id
的值对应于数据库中有效的shop_subscription
帖子ID。
这可能在您的posts
表中,但是众所周知,Woo有时会在数据库中做一些松鼠,因此,如果您在posts
中找不到它,请使用以下查询来找到它:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'shop_subscription'
AND TABLE_SCHEMA='YourDatabase';
您可能必须稍微摆弄以上以获取正确的字段,但是在PhpMyAdmin或其他一些MySQL可视化工具和查询INFORMATION_SCHEMA.COLUMNS
之间,您不应该很难找到它。
提供出现的出现,您已经确认您正在传递一个有效的ID,因此,如果它仍然损坏,您的下一步就是从实际的WOO函数中返回跟踪,并弄清楚为什么它不提供值。
这稍微挖掘了WordPress内部功能,因此请确保您在使用git或tar文件或其他内容执行此操作之前备份网站,以免将hacks留在核心或插件中。如果仍然被打破,请在此时继续进行备份。
下一件事(假设您尚未找到实际问题)是进入WC_Subscriptions_Manager::prepare_renewal
功能并从那里记录两件事(请参阅此答案顶部的repo链接以帮助导航)。您想记录print_r( debug_backtrace(), 1)
以从Woo向后记录完整的回溯(这很大,除非您喜欢大量的日志文件,否则请不要在那里留在那里。
您还需要在该方法中直接登录$subscription_id
的值,以确保它与传递的值相同。
从您的错误外观中,看来它根本没有传递。这很可能表明您从数据库或钩子中获得了null
,因此应在此诊断的第一部分解决您的问题。第二部分是确保您实际纠正问题的冗余。
- 作业需要为修改代码的每个步骤运行。等待下一个执行,如果有可能帮助您的调试努力,请手动运行或进行Dryr。
如果以前的开发人员入侵了WOO插件,则可以使用Git来轻松地隔离他的所有更改:
:cd /path/to/plugin
git init
git add --all
git remote add origin git@github.com:wp-premium/woocommerce-subscriptions.git
git commit
git pull
然后git diff
从GitHub页面上稳定版本的提交之一。diff
这应该涵盖工作迅速调试工作,还可以隔离您可能尚不清楚您甚至可能不知道的任何其他残留问题。