Intereting Posts
Как изменить запрос для исключения сообщений путём? Отображение всех сообщений пользовательского типа сообщений в многоязычном бэкэнд WordPress Сброс ролей и возможностей по умолчанию открыть все .docs в слове онлайн Пользовательский MetaBox: пункт меню еды Доступные даты Мой сайт WordPress всегда отображает кешированную версию своей домашней страницы Создание уникального идентификационного номера с префиксом при регистрации или покупке определенного продукта После обновления сайта для использования SSL все изображения в сообщениях указывают на http: // Создайте несколько разделов для всех категорий, а затем запросите все сообщения для каждой из этих категорий Самый ранний WP Hook для безопасного и надежного перенаправления Скрыть не классифицированные, если нет набора категорий facebook Страница Публикация 2 Как добавить фильтр в функцию get_body_class? Можно ли настроить Rich Text для каждого пользователя? Изменение базового языка одного плагина

Как передать переменную в действие wp_ajax?

Я пишу плагин, который извлекает данные из внешнего API и вставляет его в тему bbPress. Вот пример кода:

function bbp_ajax() { $topic_id = bbp_get_topic_id(); $the_issue_key = get_post_meta( $topic_id, 'bbp_jira_issue_field', true); $nonce = wp_create_nonce( 'theNonce' ); // jQuery AJAX Code, actions bbpAjax... } add_action ( 'bbp_template_before_replies_loop', 'bbp_ajax'); function get_ajax_content() { check_ajax_referer( "theNonce" ); $api_url = get_option( 'jifbs_url' ); $fullurl = $api_url.$the_issue_key; $username = get_option( 'jifbs_username' ); // Then I pull in the data with cURL and echo it. But I need $the_issue_key to complete the API auth } add_action( 'wp_ajax_bbpAjax', 'get_ajax_content' ); add_action( 'wp_ajax_nopriv_bbpAjax', 'get_ajax_content' ); 

Я не могу понять, как передать $the_issue_key в функцию get_ajax_content . Я попытался установить его как глобальный (содрогание), но он всегда возвращает null.

$the_issue_key = get_post_meta( $topic_id, 'bbp_jira_issue_field', true); запуск функции get_ajax_content возвращает значение null.

Есть ли что-то конкретное для действия wp_ajax которое мне может понадобиться, или я wp_ajax что-то действительно очевидное?

Solutions Collecting From Web of "Как передать переменную в действие wp_ajax?"

Вам нужно будет поместить значение переменной на страницу, чтобы javascript мог передать ее обратно на PHP с помощью ajax. Функции Ajax – это полностью отдельная «загрузка страницы», поэтому даже если вы сделали ее глобальной, она не будет работать. Лучший способ сделать это – использовать «wp_localize_script» ( https://codex.wordpress.org/Function_Reference/wp_localize_script )

Вот полный пример того, как вы могли это сделать:

 //First enqueue your javascript in WordPress function your_prefix_enqueue_scripts(){ //Enqueue your Javascript (this assumes your javascript file is located in your plugin in an "includes/js" directory) wp_enqueue_script( 'your_unique_js_name', plugins_url('js/yourjavascriptfile.js', dirname(__FILE__) ), array( 'jquery' ) ); //OR (simpler but not recommended) wp_enqueue_script( 'your_unique_js_name', 'http://domain.com/myjavascriptfile.js', array( 'jquery' ) ); //Here we create a javascript object variable called "youruniquejs_vars". We can access any variable in the array using youruniquejs_vars.name_of_sub_variable wp_localize_script( 'your_unique_js_name', 'youruniquejs_vars', array( //To use this variable in javascript use "youruniquejs_vars.ajaxurl" 'ajaxurl' => admin_url( 'admin-ajax.php' ), //To use this variable in javascript use "youruniquejs_vars.the_issue_key" 'the_issue_key' => $the_issue_key, ) ); } add_action( 'wp_enqueue_scripts', 'your_prefix_enqueue_scripts' ); //This is your Ajax callback function function your_ajax_callback_function_name(){ //Get the post data $the_issue_key = $_POST["the_issue_key"]; //Do your stuff here //Create the array we send back to javascript here $array_we_send_back = array( 'test' => "Test" ); //Make sure to json encode the output because that's what it is expecting echo json_encode( $array_we_send_back ); //Make sure you die when finished doing ajax output. die(); } add_action( 'wp_ajax_' . 'your_ajax_callback_function_name', 'your_ajax_callback_function_name' ); add_action( 'wp_ajax_nopriv_' . 'your_ajax_callback_function_name', 'your_ajax_callback_function_name' ); 

А затем в вашем файле javascript выполните примерно так:

 jQuery(document).ready(function($){ /** * When your ajax trigger is clicked * */ $( document ).on( 'click', '.my-button', function(event){ event.preventDefault(); // Use ajax to do something... var postData = { action: 'your_ajax_callback_function_name', the_issue_key: youruniquejs_vars.the_issue_ke, } //Ajax load more posts $.ajax({ type: "POST", data: postData, dataType:"json", url: youruniquejs_vars.ajaxurl, //This fires when the ajax 'comes back' and it is valid json success: function (response) { alert( response.test ); } //This fires when the ajax 'comes back' and it isn't valid json }).fail(function (data) { console.log(data); }); }); });