WOOCommerce缺少参数1 for WC_SUBSCRIPTIONS_MANAGER :: prepar_rene



每当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

中会显示任何更改

这应该涵盖工作迅速调试工作,还可以隔离您可能尚不清楚您甚至可能不知道的任何其他残留问题。