avgustov
@avgustov

Как вывести значения ACF Вордпресс в модальном окне?

Столкнулся с такой проблемой, что при показе записи в модельном окне не выводятся значения Группы полей (ACF).
Цикл выводится и модальное окно появляется при нажатии на кнопку но оно пустое, никак не соображу в чем проблема.

код functions.php
function artisansweb_scripts() {
    wp_enqueue_style('bootstrapcss', 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css', array(), false, 'all');
      
    wp_register_script('bootstrapjs', 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js', array('jquery'), false, true);
    wp_enqueue_script('bootstrapjs');
  
    wp_register_script('custom-script', get_stylesheet_directory_uri(). '/js/custom.js', array('jquery'), false, true);
    // Localize the script with new data
    $script_data_array = array(
        'ajaxurl' => admin_url( 'admin-ajax.php' ),
        'security' => wp_create_nonce( 'view_post' ),
    );
    wp_localize_script( 'custom-script', 'blog', $script_data_array );
    wp_enqueue_script('custom-script');
}
add_action('wp_enqueue_scripts', 'artisansweb_scripts');

function load_post_by_ajax_callback() {
    check_ajax_referer('view_post', 'security');
    $args = array(
        'post_type' => 'post',
        'p' => $_POST['id'],
    );
     
    $posts = new WP_Query( $args );
     
    $arr_response = array();
    if ($posts->have_posts()) {
         
        while($posts->have_posts()) {
             
            $posts->the_post();
             
            $arr_response = array(
                'title' => get_the_title(),
                'content' => get_the_content(),
            );
        }
        wp_reset_postdata();
    }
     
    echo json_encode($arr_response);
     
    wp_die();
}
add_action('wp_ajax_load_post_by_ajax', 'load_post_by_ajax_callback');
add_action('wp_ajax_nopriv_load_post_by_ajax', 'load_post_by_ajax_callback');

Вывод цикла постов
<?php if ( $arr_posts->have_posts() ) :  ?>
    <?php while ( $arr_posts->have_posts() ) : $arr_posts->the_post(); ?>
        <div>
            <?php the_title(); ?>
            <button data-id="<?php the_ID(); ?>" class="view-post"><?php _e('View More'); ?></button>
        </div>
    <?php endwhile; ?>
<?php endif; ?>

Код модального окна
<div class="modal" id="postModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="postModalLabel">testing</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body"></div>
        </div>
    </div>
</div>

Скрипт
jQuery(function($) {
    $('body').on('click', '.view-post', function() {
        var data = {
            'action': 'load_post_by_ajax',
            'id': $(this).data('id'),
            'security': blog.security
        };
  
        $.post(blog.ajaxurl, data, function(response) {
            response = JSON.parse(response);
            $('#postModal h5#postModalLabel').text(response.title);
            $('#postModal .modal-body').html(response.content);
  
            var postModal = new bootstrap.Modal(document.getElementById('postModal'));
            postModal.show();
        });
    });
});
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
avgustov
@avgustov Автор вопроса
Сообразил как нужно было сделать:
в functions.php добавить: 'field_name' => get_field('acf-field'),
а в коде модального окна для вывода поля в нужном месте установить id из скрипта:
<div class="modal-body">
<p class="" id="postModalField"></p>
</div>

в скрипте добавить строчки с id на подобии:
$('#postModal .modal-body #postModalField').html(response.field_name);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AndiMandi
@AndiMandi
Вроде юн, а уже на заводе :)
Ну тебе нужно чем-то вывести ACF-поля. А их нет. Например, у тебя есть какое-то поле с именем 'test', а как его показать, если ты его не прописал? Конструкция в помощь:
<?php the_field('test'); ?>
Тебе нужно это вставить в модальное окно перед кнопкой
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы