Ich versuche, eine Tag-Box ähnlich der des Backend zu machen, aber für das Frontend. Ich verwende AJAX, um Vorschläge für Tags zu erhalten, wenn der Benutzer das Eingabefeld eingibt.
Ich habe AJAX in WordPress in der Vergangenheit ohne Probleme in Themen und so verwendet, aber im Moment versuche ich ein Plugin zu bauen und da es viel komplizierter ist, versuche ich mit WordPress Plugin Boilerplate objektorientiert zu gehen (wppb.io) als Basis.
Aber ich kann es nicht mit dem Boilerplate funktionieren. Der AJAX-Aufruf funktioniert, aber Erfolg: function (data) gibt immer 0 zurück, wenn es “testing” zurückgeben soll, was mich glauben lässt, dass meine function nie aufgerufen wird. Ich habe Stunden damit verbracht und kann den Fehler nicht erkennen
Das ist mein Code:
/public/js/my-plugin-public.js
$('#my_plugin_tags').keyup(function() { var user_input = $(this).val(); var user_input_last = $.trim(user_input.split(',').pop()); $.ajax({ url: my-plugin.ajax_url, type: 'POST', data: { 'user_input': user_input_last }, success:function(data) { console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); });
/public/class-my-plugin-public.php
/** * Register the JavaScript for the public-facing side of the site. * * @since 1.0.0 */ public function enqueue_scripts() { wp_enqueue_script( 'my-plugin-public', plugin_dir_url( __FILE__) . 'js/my-plugin-public.js', array( 'jquery' , $this->plugin_name ), $this->version, false ); wp_localize_script( 'my-plugin-public', 'my-plugin' , array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); }
/public/class-my-plugin-class-public.php
/** * Get tag suggestions from while user writes * * @since 1.0.0 */ public function tags_autofill_function() { echo('Testing'); }
/includes/class-my-plugin.php
/** * Register all of the hooks related to the public-facing functionality * of the plugin. * * @since 1.0.0 * @access private */ private function define_public_hooks() { // Load CSS & Scripts $plugin_public = new My_Plugin_Public( $this->get_plugin_name(), $this->get_version() ); $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' ); $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' ); // Custom Class from My Plugin $plugin_class_public = new My_Plugin_Class_Public(); $this->loader->add_action( 'wp_ajax_tags_autofill_function', $plugin_class_public , 'tags_autofill_function' ); $this->loader->add_action( 'wp_ajax_nopriv_tags_autofill_function', $plugin_class_public , 'tags_autofill_function' ); }
Es gibt keine action
für die Daten, die Sie an Ajax übergeben. Auf diese Weise sendet WordPress nur einen generischen Aufruf an Ajax, der immer 0 zurückgibt. Sie müssen Ihre Daten in Ihrer JS-Datei bearbeiten, und zwar so:
data: { 'user_input': user_input_last, 'action': 'tags_autofill_function' },