2017-05-30 1 views
0

Voici mon code:fonction de rappel WooCommerce est pas appelé

add_action('plugins_loaded', 'mojo_abc_init', 0); 
function mojo_abc_init() { 
... 

include_once('woocommerce-abc.php'); 

... 
add_filter('woocommerce_payment_gateways', 'mojo_add_abc_gateway'); 
function mojo_add_abc_gateway($methods) { 
    $methods[] = 'MOJO_ABC'; 
    return $methods; 
} 
... 
} 

Mon fichier WooCommerce-abc.php:

class MOJO_ABC extends WC_Payment_Gateway{ 
    function __construct() { 

     ... 

     add_action('woocommerce_api_mojo_abc', array($this, 'check_abc_response')); 

     ... 
    } 

    /* callback function */ 
    function check_abc_response(){ 

    /* code */ 
    wp_die(); 
    } 

} 

Maintenant, mon problème est ma fonction de rappel n'est pas appelé. L'URL est http://site_url/wc-api/MOJO_ABC. À la place, l'écran affiche seulement 1 et rien dans les journaux de débogage n'indique également un problème avec le code.

Toute aide serait grandement appréciée. Merci

+0

Je voudrais essayer d'initialiser votre plugin sur le crochet 'woocommerce_loaded'. Mais aussi, ajoutez-vous votre passerelle via le filtre 'woocommerce_available_payment_gateways'? Vous n'avez pas montré cette partie de votre code. – helgatheviking

+0

@helgatheviking J'ajoute ma passerelle via le filtre 'woocomerce_available_payment_gateways'. J'ai modifié le code. En tout cas j'ai été capable de résoudre le problème. –

+0

Pourriez-vous poster votre solution en réponse? – helgatheviking

Répondre

0

J'ai été capable de résoudre le problème en désactivant tous les plugins, puis en les ajoutant un par un avec mon plugin et en vérifiant les journaux de débogage du woocommerce.

J'ai trouvé que l'un des autres plugins avait quelques bugs et c'est ce qui interférait avec mon hook pour s'inscrire correctement et donc ne pas être appelé. J'ai désactivé ce plugin seulement et il a commencé à fonctionner comme un charme. J'ai informé le développeur du plugin du problème pour le moment.

Pour le débogage, vous devez faire des choses qui m'a aidé à trouver la question:

  1. activer le mode de débogage dans le fichier de wordpress wp-config.php:
    `

    define (» WP_DEBUG ', true); define ('WP_DEBUG_LOG', true); // Désactiver l'affichage des erreurs et des avertissements define ('WP_DEBUG_DISPLAY', false); @ini_set ('display_errors', 0);

`

2.Ajoutez fonctionnalité de journal dans le plugin pour écrire des journaux dans le fichier de débogage pour vérifier le flux de votre code et d'autres choses: Ajouter ce code dans votre constructeur au début: - `

if (!function_exists('write_log')) { 
     function write_log ($log) { 
      if (true === WP_DEBUG) { 
      if (is_array($log) || is_object($log)) { 
       error_log(print_r($log, true)); 
      } else { 
       error_log($log); 
      } 
      } 
     } 
     } 

<br> And write logs by write.log ("abc") or write.log ($ var) `. De cette façon, vous pouvez éliminer les possibilités d'erreurs dans votre flux de production et vous concentrer sur les autres éléments qui pourraient avoir causé le problème.