快捷码在AJAX调用中不起作用

时间:2016-05-28 作者:JMDee

我正在使用AJAX加载主页上的下一组帖子。立柱加载良好,但不会渲染短代码。我正在尝试对ajax调用获取的内容使用do\\u shortcode函数(尽管专家建议not to use do_shortcode) 但显然它正在失败。

以下是我处理请求的函数:

function theme_load_more_posts() {
    check_ajax_referer( \'theme-load-more-posts-nonce\', \'nonce\' );

    $args = isset( $_POST[\'query\'] ) ? array_map( \'esc_attr\', $_POST[\'query\'] ) : array();
    $args[\'post_type\'] = isset( $args[\'post_type\'] ) ? esc_attr( $args[\'post_type\'] ) : \'post\';
    $args[\'paged\'] = esc_attr( $_POST[\'page\'] );
    $args[\'post_status\'] = \'publish\';
    ob_start();
    $loop = new WP_Query( $args );
    if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post();
        get_content_template();
    endwhile; 
    endif;
    $data = ob_get_clean();
    wp_send_json_success( do_shortcode($data) ); // Performing do_shortcode here but it doesn\'t work.
    wp_reset_postdata();
    wp_die();
}
add_action( \'wp_ajax_theme_load_more_posts\', \'theme_load_more_posts\' );
add_action( \'wp_ajax_nopriv_theme_load_more_posts\', \'theme_load_more_posts\' );
Theget_content_template() 函数加载一个模板文件,该文件包含用于显示帖子内容的常规wordpress代码。

我试过使用do_shortcode_in_html() 在…上get_content_template() 但它也不起作用。

我也看到了与此相关的类似线程,但它们主要解决了ajax调用本身的问题。我认为我的问题在于这个功能。有什么猜测吗?

1 个回复
SO网友:brianjohnhanna

我想问题是你没有打电话do_shortcode() 在输出缓冲区中。您不需要在输出缓冲区内运行循环,因为我可以假设get_content_template() 只需返回带有嵌入式短代码的HTML。将其保存到字符串变量,然后通过do_shortcode() 并保存echoed输出到缓冲区。

这是未经测试的,但应将您引导到正确的方向:

function theme_load_more_posts() {
    check_ajax_referer( \'theme-load-more-posts-nonce\', \'nonce\' );

    $args = isset( $_POST[\'query\'] ) ? array_map( \'esc_attr\', $_POST[\'query\'] ) : array();
    $args[\'post_type\'] = isset( $args[\'post_type\'] ) ? esc_attr( $args[\'post_type\'] ) : \'post\';
    $args[\'paged\'] = esc_attr( $_POST[\'page\'] );
    $args[\'post_status\'] = \'publish\';
    $loopContent = \'\';
    $loop = new WP_Query( $args );
    if( $loop->have_posts() ): 
        while( $loop->have_posts() ): $loop->the_post();
            $loopContent .= get_content_template();
        endwhile; 
    endif;
    ob_start();
    echo do_shortcode($loopContent);
    $data = ob_get_clean();
    wp_send_json_success( $data ); // Performing do_shortcode here but it doesn\'t work.
    wp_reset_postdata();
    wp_die();
}
add_action( \'wp_ajax_theme_load_more_posts\', \'theme_load_more_posts\' );
add_action( \'wp_ajax_nopriv_theme_load_more_posts\', \'theme_load_more_posts\' );

相关推荐

Select2 AJAX和WP查询返回全部,不筛选

所以我在这里有点困惑。我经常使用Select2/AJAX/WP\\u查询来搜索和检索默认的WP帖子类型和我自己的自定义帖子类型。在过去几年中,我构建的几乎每个站点都至少包含一个实现。但是,我目前正在一个网站上搜索自定义帖子类型的结果,它只是返回所有内容。没有发生过滤。这是一个计划工具,管理员正在为一年中的每个月制定一个计划(自定义帖子类型)。时间表的标题为“月-年”,即。\'January 2022\'.问题是,如果您搜索“一月”,例如,您将得到返回的每个存在的时间表。包括2022年2月、2021 6月等