Estoy desarrollando un sitio de WordPress usando plantillas / temas personalizados, pero estoy teniendo problema. Quiero usar Ajax para llamar a una función cuando un usuario hace clic en un botón. En una página, tengo un botón así:

<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p> 

Y tengo una función jQuery / Ajax como esta:

jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", }, success: function (output) { console.log(output); } }); }); }); 

La función anterior vive en wp-content/themes/my-theme/js/wp_ajax_calls.js. Agregué el script al sitio así:

1) Agregué esto a mi archivo functions.php:

wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true); 

2) Incluí el guión en el encabezado.

<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script> 

Cuando hago clic en el botón como está, aparece la declaración console.log. A mi entender, quiero que mi función ajax llame a una función php que me permita usar $ wpdb. Tengo esto en functions.php:

function mark_message_as_read() { global $wpdb; // do stuff. } 

Aquí es donde me estoy confundiendo. Tengo dos preguntas principales:

1) Creo que se supone que debo tener algunos add_action () «s en alguna parte, pero no sé dónde ponerlos y tampoco sé qué gancho debería usar.

2) Además, Quiero poder pasar datos (la identificación del mensaje) a la función php para mi consulta db. ¿Cómo paso un argumento a esa función?

No quiero usar algo como if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever(); debido a la forma en que tengo configurados los mensajes.

Me complace brindar más información si es necesario. ¡Gracias de antemano por su ayuda!

Comentarios

Responder

  1. Crea un tema hijo para que no te metas con el código de un tema existente porque la próxima vez que lo actualice, es posible que pierda todos los cambios (consulte Temas secundarios )

  2. A continuación, se muestra cómo pasar valores a su solicitud ajax:

    jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", // add your parameters here message_id: $(".your-selector").val() }, success: function (output) { console.log(output); } }); }); }); 

Puede investigar un poco en Nonces también, para agregar una capa de seguridad a su aplicación: https://codex.wordpress.org/WordPress_Nonces

  1. Finalmente, el código PHP para manejar la solicitud (aquí también debe manejar el nonce en código de la vida real):

    // register the ajax action for authenticated users add_action("wp_ajax_mark_message_as_read", "mark_message_as_read"); // register the ajax action for unauthenticated users add_action("wp_ajax_nopriv_mark_message_as_read", "mark_message_as_read"); // handle the ajax request function mark_message_as_read() { $message_id = $_REQUEST["message_id"]; // add your logic here... // in the end, returns success json data wp_send_json_success([/* some data here */]); // or, on error, return error json data wp_send_json_error([/* some data here */]); } 

Comentarios

  • ¡Muchas gracias! Yo ' definitivamente también echaré un vistazo a los nonces. : D

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *