PHP-Hooks add_action() do_action() funktionieren nicht

Lesezeit: 2 Minuten

Benutzer-Avatar
das_ist_eine_Person

Mein Code funktioniert, wenn ich die Haken entferne add_action() und entfernen 'action': 'contact' Bei AJAX. In diesem Fall kehrt es zurück ‘Erfolg’. Aber sobald ich Hooks zu email.php hinzufüge und 'action': 'contact' es hört auf, mir etwas zurückzugeben. Könnt ihr mir einen Rat geben wie ich das beheben kann? Ich glaube, ich mache es genau so, wie in der Dokumentation.

Dies ist mein einfacher Code:

E-Mail.php:

<?php

 add_action( 'wp_ajax_nopriv_contact', 'contact' );
 add_action( 'wp_ajax_contact', 'contact' );

 function contact() {
  echo 'Success';
  wp_die();
 }

 ?>

Funktionen.php:

function load_script()
{
  wp_enqueue_script( 'contact_form', get_template_directory_uri() . '/contact_form/contact_form.js', array('jquery') );
  wp_localize_script( 'contact_form', 'ajax_object', array('ajaxurl' => get_template_directory_uri() . '/email.php')
  );
}

add_action('wp_enqueue_scripts', 'load_script');

Contact_form.js:

(function($){
$(document).ready(function() {
    $( '.mybtn' ).click( function(e) {
        e.preventDefault();
        $.ajax({
          url: ajax_object.ajaxurl,
          type: 'POST',
          data: {
              'action': 'contact'
          },
          success: function( response ) {
              console.log('The server responded: ',response);
          },
        });
   });
});
})(jQuery);

Dann habe ich versucht, einfach ‘Aktion’ zu entfernen: ‘Kontakt’ und
E-Mail.php ändern in:

<?php

add_action( 'contact', 'contactme' );

function contactme() {
  echo 'Success';
}

do_action('contact');

?>

Und es funktioniert nicht!
Aber der nächste Code funktioniert perfekt:

<?php
  echo 'Success';
?>

AJAX gibt Erfolg zurück.

Ich habe auch versucht, 10 und auch 1 am Ende von add_action hinzuzufügen:

<?php

add_action( 'wp_ajax_nopriv_contact', 'contact', 10 );
add_action( 'wp_ajax_contact', 'contact', 10 );

function contact() {
  echo 'Success';
  wp_die();
}

?>

Aber es hat nicht geholfen.

Weißt du, warum meine Haken nicht funktionieren? Danke im Voraus.

Bei der Verwendung von Ajax in WordPress rufen wir nicht die Datei auf, die die Funktion speichert, die Sie ausführen möchten. Stattdessen admin-ajax.php wird genannt.

Dein email.php Datei sieht wie folgt aus, aber Sie müssen sie in Ihre Datei einschließen Funktion.php. Oder setzen Sie diese Funktion einfach in die Funktion.php Datei. Beachten Sie auch, dass jede Funktion, die von einer Ajax-Anfrage aufgerufen wird, mit enden muss wp_die().

function contact() {
  echo 'Success';
  wp_die();
}
add_action( 'wp_ajax_nopriv_contact', 'contact' );
add_action( 'wp_ajax_contact', 'contact' );

Als nächstes rein load_script() hinzufügen admin_url('admin-ajax.php') in 'ajaxurl'.

function load_script() {
  wp_enqueue_script( 'contact_form', get_template_directory_uri() . '/contact_form/contact_form.js', array('jquery') );
  wp_localize_script( 'contact_form', 'ajax_object', array('ajaxurl' => admin_url('admin-ajax.php')) );
}
add_action('wp_enqueue_scripts', 'load_script');

contact_form.js wird fast gleich sein.

(function($){
  $('.mybtn').on('click', function(e) {
    e.preventDefault();
    $.ajax({
      url: ajax_object.ajaxurl,
      data: {
        action: 'contact'
      },
      success: function(data) {
        console.log(data);
      },
    });
 });
})(jQuery);

1019470cookie-checkPHP-Hooks add_action() do_action() funktionieren nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy