使用 AJAX 调用 functions.php 中的 do_shortcode 功能

Call do_shortcode functionality in functions.php with AJAX

我正在尝试为 Profile Builder 插件实现 do_shortcode 功能,以便在从登录表单调用时加载注册表单。由于表单将以相同的模式 window 显示,因此需要通过 AJAX.

加载注册表单

在functions.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();
}

在模态 window 模板中,我有:

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' 文本。 我怎样才能得到包含此短代码的注册表?

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);
        }
    });
}