使用AJAX加载wordpress页面并解析主题短代码

时间:2018-02-15 12:38:35

标签: php ajax wordpress

我目前正在创建一个基于X Theme的wordpress页面,该页面利用Cornerstone作为页面构建器。

我正在尝试使用AJAX将页面动态加载到主页面中。为此,我创建了一个脚本,向admin-ajax.php提出了一个完美无缺的请求。

现在棘手的部分:我添加了一个包含以下代码的插件Code Snippets的PHP代码段:

function get_case() {
    global $wpdb;

    $postNo = intval( $_POST['case'] );

    $post = get_post($postID);
    $content = apply_filters('the_content', $post->post_content);
    $html = do_shortcode($content)
    echo $html;

    wp_die();
}

add_action( 'wp_ajax_get_case', 'get_case' );
add_action( 'wp_ajax_nopriv_get_case', 'get_case' );

如果我使用wordpress页面构建器,此代码将返回正确的结果,但如果页面是在Cornerstone中构建的,它只返回主题的短代码。

e.g。

[cs_element_section _id=”1″][cs_element_row _id=”2″]...

我这样做是否正确? do_shortcodes()不应解决这些短代码吗?有没有其他方法可以动态加载子页面?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您实际上不需要do_shortcode(如果这是您的完整代码,则为global $wpdb),因为这是在 the_content 上自动运行的,假设它没有在其他位置取消挂钩。我们无法看到您的完整设置(插件,主题,自定义代码)进行完全调试,但下面的代码是您在Plain Vanilla WordPress网站上所需要的,以完成您尝试的操作。如果这不起作用,则问题出在设置的其他位置:

function get_case() {
  $postNo = intval( $_POST['case'] );
  $post = get_post($postNo); // NOTE: Your code has the wrong variable here
  $content = apply_filters('the_content', $post->post_content);
  exit( $content );
}
add_action( 'wp_ajax_get_case', 'get_case' );
add_action( 'wp_ajax_nopriv_get_case', 'get_case' );