Ответы пользователя по тегу WordPress
  • Можно ли в Wodpress подключить два обработчика AJAX к одному и тому же файлу js?

    KaSeo
    @KaSeo Автор вопроса
    Front-end разработчик
    Ответ - да. Размещу пример своего кода, возможно это то, что ты ищешь :)

    Обработка ajax запрос'ов у меня лежит в файле wp-content/themes//assets/js/template.js

    Ниже выдержка кода из своего плагина для темы. Также можно его адаптировать и для файла functions.php - заменить, например, array( $this, 'load_scripts') на 'load_scripts'
    /**
     * РЕГИСТРАЦИЯ ХУКОВ
     */
    public function init() {
    	add_action( 'wp_enqueue_scripts', array( $this, 'load_scripts'), 20 );
    
    	add_action( 'wp_ajax_get_ajax_1_action', array( $this, 'get_ajax_1_callback' ) );
    	add_action( 'wp_ajax_nopriv_get_ajax_1_action', array( $this, 'get_ajax_1_callback' ) );
    
    	add_action( 'wp_ajax_get_ajax_2_action', array( $this, 'get_ajax_2_callback' ) );
    	add_action( 'wp_ajax_nopriv_get_ajax_2_action', array( $this, 'get_ajax_2_callback' ) );
    }
    
    /**
     * ПОДКЛЮЧЕНИЕ СКРИПТОВ
     *
     * Главный файл скриптов темы смотри в wp-content/themes/<theme-name>/assets/js/template.js
     */
    static function load_scripts() {
    
    	$script_data_array_1 = array(
    		'ajax_url' => admin_url( 'admin-ajax.php' ),
    		'security' => wp_create_nonce( 'get_ajax_1' )
    	);
    	$script_data_array_2 = array(
    		'ajax_url' => admin_url( 'admin-ajax.php' ),
    		'security' => wp_create_nonce( 'get_ajax_2' )
    	);
            // id скрипта берется из functions.php или внутри плагина - там где впервые подключается этот скрипт.
    	wp_localize_script( 'template-js', 'get_ajax_1', $script_data_array_1); 
    	wp_localize_script( 'template-js', 'get_ajax_2', $script_data_array_2 ); 
    }
    
    /**
     * ОБРАБОТЧИК AJAX ЗАПРОСА 1
     */
    static function get_ajax_1_callback() {
    	check_ajax_referer('get_ajax_1', 'security');
    	$params = isset( $_POST ) ? $_POST : false; // получаем данные из POST запроса
    	$data = array(); // здесь храним данные для передачи на фронт
    	wp_send_json_success( $data ); // передаем на фронт и через JS обрабатываем данные
    	wp_die();
    }
    
    /**
     * ОБРАБОТЧИК AJAX ЗАПРОСА 2
     */
    static function get_ajax_2_callback() {
    	check_ajax_referer('get_ajax_2', 'security');
    	$params = isset( $_POST ) ? $_POST : false; // получаем данные из POST запроса
    	$data = array(); // здесь храним данные для передачи на фронт
    	wp_send_json_success( $data ); // передаем на фронт и через JS обрабатываем данные
    	wp_die();
    }


    Код из template.js с примером AJAX запроса №1
    $(document).on("click", '.js-button-1', function (event) {
    	event.preventDefault();
    
    	var $btn = $(this),
    		post_id = parseInt($btn.data('post-id'), 10),
    		post_type = $btn.data('post-type'),
    		data = {
    			'action': 'get_ajax_1_action',
    			'post_type': post_type,
    			'post_id': post_id,
    			'security': get_ajax_1.security
    		};
    
    	$.ajax({
    		type: "POST",
    		url: get_ajax_1.ajax_url,
    		data: data,
    		beforeSend: function beforeSend() {
    			// здесь превью пока отправляется запрос на сервер
    		},
    		success: function (response) {
    			// про формат и структуру данных в response читать здесь: https://wp-kama.ru/function/wp_send_json_success
    			
    			if ( response.success ) {
    				var data = response.data;
    				// обрабатываем полученные из backend'а данные
    
    			} else {
    				console.log(response);
    			}
    		}
    	});
    });


    Код из template.js с примером AJAX запроса №2
    $(document).on("click", '.js-button-2', function (event) {
    	event.preventDefault();
    
    	var $btn = $(this),
    		post_id = parseInt($btn.data('post-id'), 10),
    		post_type = $btn.data('post-type'),
    		data = {
    			'action': 'get_ajax_2_action',
    			'post_type': post_type,
    			'post_id': post_id,
    			'security': get_ajax_2.security
    		};
    
    	$.ajax({
    		type: "POST",
    		url: get_ajax_2.ajax_url,
    		data: data,
    		beforeSend: function beforeSend() {
    			// здесь превью пока отправляется запрос на сервер
    		},
    		success: function (response) {
    			// про формат и структуру данных в response читать здесь: https://wp-kama.ru/function/wp_send_json_success
    			
    			if ( response.success ) {
    				var data = response.data;
    				// обрабатываем полученные из backend'а данные
    
    			} else {
    				console.log(response);
    			}
    		}
    	});
    });
    Ответ написан
    Комментировать
  • Как заставить работать input file limit в Contact Form 7?

    KaSeo
    @KaSeo Автор вопроса
    Front-end разработчик
    Коллеги, вопрос снят!
    Я невнимательно посмотрел на ко и упустил один набор радиокнопки, который был обязательным и он был в скрытом блоке :D
    Ответ написан
    Комментировать