如何在AJAX响应中呈现快捷码?

时间:2017-08-07 作者:Aaron Lynch

问题

我有一个单页布局,显示一个手风琴式的页面标题WP菜单。我使用AJAX将相应页面的WP内容加载并显示到一个div中,该div将get插入菜单的列表项中,这是可行的。

The problem I have is this: 我无法使用AJAX调用来处理第三方短代码,相反,它们是以原始状态呈现的(例如:[buzzsprout])。

然而,值得注意的是,本机WP短代码似乎呈现良好(如最新消息选项卡中所示:[音频])。因此,这似乎仅限于来自插件的第三方短代码。

最后,我在多个地方读到,这可能是一个限制,因为WP AJAX url不能访问所有WP环境,只能访问其所称的管理员,但其他人说这不是真的。

所以,我很好奇。。。

有没有任何方法可以让AJAX处理并呈现WP页面内容中使用的第三方短代码


JS

$("#tabs li a").click(function() {

    var id = ($(this).attr("data-id"));

    $.ajax({
        type: \'POST\',
        url: ajax_object.ajax_url,
        data: {
            \'action\' : \'fetch_ajax_content\',
            \'id\' : id
        },
        success:function(data) {
            $(\'.ajax-content\').remove();
            $(\'#tabs li\').removeClass(\'active\');
            $(\'[data-id=\' + id + \']\').parent().append(data).hide();
            $(\'[data-id=\' + id + \']\').parent().addClass(\'active\');
            $(\'.active\').slideToggle();
        }
    });

});
PHP
if ( ! function_exists( \'vwo_enqueue_scripts\' ) ) {

    function vwo_enqueue_scripts() {
        wp_enqueue_script( \'vwo-scripts\', get_template_directory_uri() . \'/js/scripts.js\', array( \'jquery\' ), \'1.0\', true );
        wp_localize_script( \'vwo-scripts\', \'ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
    }

}

add_action( \'wp_enqueue_scripts\', \'vwo_enqueue_scripts\' );

function fetch_ajax_content() {

    if ( isset( $_POST ) ) {
        $id = $_POST[\'id\'];
        $page = get_page( $id );
    ?>

    <div class="ajax-content">
        <?php echo apply_filters( \'the_content\', $page->post_content ); ?>
    </div>

    <?php
    }

    die();
}

add_action( \'wp_ajax_fetch_ajax_content\', \'fetch_ajax_content\' );
add_action( \'wp_ajax_nopriv_fetch_ajax_content\', \'fetch_ajax_content\' );
非常感谢您的帮助,谢谢!

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

通常,sshortcode不是一种编程构造,而是内容宏。作为内容宏,它们在内容上下文之外使用的可行性是有限的。简单化的短代码,如库/音频/视频(我甚至不确定它们)可能在没有上下文的情况下“呈现”,但高级的短代码将需要一个正确设置的循环,并调用wp_headwp_footer.

没有简单的通用方法可以在非设计使用的情况下使用短代码,您可能想要强制使用的每个短代码可能需要对其自身的代码和环境要求有很好的理解,如果您构建一个站点,您可能能够实现这一点,但如果您试图创建一些通用主题或插件,这可能是一项毫无希望的任务。

结束

相关推荐

如何通过AJAX获取自定义帖子类型的子帖?

我收到帖子并按标签过滤Ayah。我得到了所有的帖子。这很有效。但是,当我到达帖子的父页面时,我需要获取唯一的子帖子并过滤它们。我在请求中使用“post\\u parent”=>$post->ID,但这在函数中不起作用。如果我在我想要获取它的页面上使用查询,它会很好地打印出来。/*Ajax Filter*/ //Get Applications Filters function get_applications_filters() { $args