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

问题描述 投票:0回答:1

我正在尝试为Profile Builder插件实现do_shortcode功能,以在从登录表单中调用注册表单时加载注册表单。由于表单将显示在相同的模式窗口中,因此需要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();
}

并且在模态窗口模板中,我有:

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'文本。如何获得该简码所包含的注册表格?

ajax wordpress shortcode wordpress-shortcode
1个回答
0
投票

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);
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.