Не выводятся ACF поля через Ajax WordPress
Переменная $pvar
выводится и меняется при выборе option в списке select - это работает. Но мне ещё нужно вывести значения всех ACF полей что у меня в functions.php - они не выводятся. При выборе в селекте нужно выводить всё из полей.
То что у меня в functions.php:
add_action('wp_ajax_nopriv_ajax_slide','ajax_slide');
add_action('wp_ajax_ajax_slide','ajax_slide');
function ajax_slide(){
$pvar = $_POST['hash'];
echo $pvar;
?>
<?php if( have_rows('dobavit_punkt')): ?>
<?php
$field = get_sub_field_object( 'vybor_napravleniya');
$value = $field['value'];
if($value == $pvar): ?>
<?php while ( have_rows('dobavit_punkt') ) : the_row(); ?>
<div> // тут поля </div>
<?php endwhile; ?>
<?php endif; ?>
<?php endif; ?>
<?php
wp_die();
}
Мой скрипт ajax-script.js:
jQuery(document).ready(function($){
$("select#selectedop").on( "change", function() {
let thisselval = $(this).val();
$.ajax({
type:"POST",
url: my_ajax_name.ajax_url,
data:{
'action':'ajax_slide',
'hash': thisselval
}, success: function (data){ //received content
$(".wr").empty();
$(".wr").append(data);
} });
});
});
Я его локализовал в functions.php:
wp_enqueue_script( 'service-ajax', get_template_directory_uri() . '/app/js/ajax-script.js', array( 'jquery' ), '0.0.2', true );
wp_localize_script( 'service-ajax', 'my_ajax_name', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
Ответы (1 шт):
Ваша проблема может быть связана с тем, что вы пытаетесь использовать функции ACF вне основного цикла WordPress или вне контекста, где эти функции могут работать.
В частности, функции have_rows
и get_sub_field_object
могут не работать корректно в контексте AJAX-запроса, если они не настроены правильно.
Вот несколько шагов, которые могут помочь вам решить проблему:
Проверка контекста вызова ACF функций:
Убедитесь, что вы вызываете функции ACF в правильном контексте. Например, если вы используетеhave_rows
иget_sub_field_object
, убедитесь, что они вызываются в контексте поста, который содержит эти поля.Передача ID поста:
Если ваши ACF поля привязаны к определенному посту, вам нужно передать ID этого поста в AJAX-запрос и использовать его в функции обработки AJAX.Использование функции
get_field
:
Если ваши поля не являются повторяющимися (repeater), вы можете использовать функциюget_field
для получения значений полей.
Вот пример того, как можно изменить ваш код, чтобы он работал корректно:
add_action('wp_ajax_nopriv_ajax_slide', 'ajax_slide');
add_action('wp_ajax_ajax_slide', 'ajax_slide');
function ajax_slide() {
$pvar = $_POST['hash'];
$post_id = $_POST['post_id']; // Передайте ID поста
echo $pvar;
if (have_rows('dobavit_punkt', $post_id)) :
$field = get_sub_field_object('vybor_napravleniya', $post_id);
$value = $field['value'];
if ($value == $pvar) :
while (have_rows('dobavit_punkt', $post_id)) : the_row();
?>
<div> // тут поля </div>
<?php
endwhile;
endif;
endif;
wp_die();
}
И в вашем JavaScript коде:
jQuery(document).ready(function($) {
$("select#selectedop").on("change", function() {
let thisselval = $(this).val();
let post_id = $(this).data('post-id'); // Передайте ID поста
$.ajax({
type: "POST",
url: my_ajax_name.ajax_url,
data: {
'action': 'ajax_slide',
'hash': thisselval,
'post_id': post_id
},
success: function(data) { // received content
$(".wr").empty();
$(".wr").append(data);
}
});
});
});
И не забудьте добавить атрибут data-post-id
к вашему элементу select:
<select id="selectedop" data-post-id="<?php echo get_the_ID(); ?>">
<!-- Ваши опции -->
</select>