2017-11-22 7 views
5

私のクライアントのサブスクリプションを自動的に更新するためにcronが実行されると、エラーログにこれが表示されます。WooCommerce WC_Subscriptions_Manager :: prepare_renewal()の引数1がありません

[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 

要約:woocommerce_scheduled_subscription_paymentMissing argument 1 for WC_Subscriptions_Manager::prepare_renewal()

私はhook_nameで、WP_Crontrolと呼ばれるプラグインを使用してのcronを作成しました。

WP Crontrolパネルでは、引数を渡すオプションがあります - 私は$subscription_idを追加しようとしましたが、それは何もしませんでした。

ですから、どうすればそのcronジョブを取得して、db内のすべてを処理できますか?どのくらいの設定が欠けていますか?

おかげ

免責事項:私は自分自身でそれを維持していたクライアントからこれを継承しました。私がここに来たとき、それはこのようだった、グーヴァ!

+0

'woocommerce_scheduled_subscription_payment'アクションフックの実装方法を教えてください。 – dferenc

答えて

2

WooCommerce Subscriptions Manager Git Repoを1として、これは、実行しようとしている機能です。

/** 
* 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をピックアップし、あなたのエラーログにそれを置く必要があります。次に、ジョブが再び実行されるのを待つか、手動で実行します。

ジョブが実行された後、あなたは次のことをチェックする必要があります。

  • メッセージがあなたのログに(当たり前)
  • を示した0​​の値が整数で、かつnullではありませんか、偽です。
  • $subscription_idの値は、データベースの有効なshop_subscription投稿IDに対応しています。

これはそれを見つけるために、次のようなクエリを使用し、その後、あなたのpostsテーブルで、おそらくですが、ウーは、あなたがpostsでそれを見つけることができませんので、もし、機会にデータベースにいくつかのsquirrellyことを行うことが知られています:

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ファイルなどでこれを行う前に必ずサイトをバックアップして、コアやプラグインにハックを残さないようにしてください。それでも問題が解決しない場合は、先に進む前にバックアップを実行してください。


次の事(あなたはまだ、実際の問題を発見していないと仮定)がWC_Subscriptions_Manager::prepare_renewal関数に行き、そこから二つのことをログに記録することです(ナビゲートするために、この答えの上部にあるレポのリンクを参照してください) 。 print_r(debug_backtrace(), 1)をログに記録して、Wooから完全なバックトレースをログに記録します(これは大きくなりますが、大量のログファイルがすべてのディスクスペースを混乱させるような場合を除いて、そこに残さないでください)。

また、値が$subscription_idの値になるように、そのメソッド内で直接ログに記録することもできます。

エラーの外観から、まったく渡されていないようです。これは、データベースまたはフックからnullという結果が得られたことを示しているため、この診断の最初の部分で問題を解決する必要があります。 2番目の部分は、問題を実際に修正したことを保証するための冗長性です。

  • コードを変更する手順ごとにジョブを実行する必要があります。それが次回実行されるまで待つか、手動で実行するか、またはデバッグ作業に役立つ場合はドライランを実行してください。以前の開発者はウープラグインをハッキングした場合

、あなたは以下のようにして、かなり簡単に彼のすべての変更を隔離するためにgitを使用することができます。その後、

cd /path/to/plugin 
git init 
git add --all 
git remote add origin [email protected]:wp-premium/woocommerce-subscriptions.git 
git commit 
git pull 

git diff安定版リリースのコミットからの1 githubページ。 diff

これは、ジョブのデバッグを迅速に行い、以前の開発者から残っている可能性がある他の問題を特定します。

+0

あなたが使用している 'WC_Subscriptions_Manager'のバージョンはわかりませんが、最もよく構造化されたgit reposはバージョンリリースに対応するタグを使用していますので、あなたが持っているバージョンをチェックし、そのコミットに対してgit diff'を実行して、diffの中で偽のフラグとしてコア開発者の変更を排除します。 – mopsyd

+0

こんにちは、頑張ってくれてありがとう。 私はそれをもっと明確にしておくべきです - 私は私のMacにwordpressのローカルコピーを実行しています。私のデバッガとしてphpstormを使用し、ここにクライアントデータベースのコピーを使用しています。私は、ロギングの記述などは、変数を直接調べるだけでなく、同じようにwp_cron.phpにスタックをバックアップすることによって、すべての説明が却下されることを恐れています。 subscription_idは単に渡されることはありません。 – WeeDom

+0

あなたは最低でも利用可能なsubscription_idを持っていますか? – mopsyd

関連する問題