Вызов функции do_shortcode в функциях. php с AJAX - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь реализовать функциональность do_shortcode для плагина Profile Builder для загрузки формы регистрации, когда она вызывается из формы входа в систему. Поскольку форма будет отображаться в том же модальном окне, которое требует, чтобы форма регистрации загружалась с помощью AJAX.

В функциях. php есть функция для загрузки содержимого шорткода:

add_action( 'wp_ajax_nopriv_do_shortcode', 'do_shortcode' );
add_action( 'wp_ajax_do_shortcode', 'do_shortcode' );
function do_shortcode( ) {
    $shortcode = $_REQUEST['shortcode_name'];
    ob_start();
    echo do_shortcode( $shortcode );
    ob_get_contents();
    $modal = ob_get_clean();

    echo $modal;
    die();
}

И в шаблоне модального окна у меня есть:

function load() {
        jQuery.ajax({
            method: 'POST',
            url: '/wp-admin/admin-ajax.php',
            data: {
                action: 'do_shortcode',
                shortcode_name: 'wppb-register'
            },
            success: function(data)
            {
                jQuery("#my-modal").replaceWith(data);
            }
        });
    }

В результате я получаю только текст 'wppb_register'. Как я могу получить регистрацию форма, которая является содержанием для этого шорткода?

1 Ответ

1 голос
/ 30 марта 2020

Do_shortcode не работает в ajax обратном вызове. поэтому я думаю, что мы должны использовать новое решение.

add_action( 'init', 'do_shortcode_callback');
function do_shortcode_callback() {
    if (isset($_REQUEST["action"]) && $_REQUEST["action"] == "do_shortcode") {
        $shortcode = $_REQUEST['shortcode_name'];

        echo do_shortcode( $shortcode );  
        exit;       
    }
}


function load() {
    jQuery.ajax({
        method: 'POST',
        url: '<?php echo site_url('/'); ?>',
        data: {
            action: 'do_shortcode',
            shortcode_name: '[wppb-register]'
        },
        success: function(data)
        {
            jQuery("#my-modal").replaceWith(data);
        }
    });
}
...