1

我在 Wordpress 中使用 ajax 请求来获取帖子的内容,在那篇帖子中我使用了 Visual Composer。但内容仅显示 VC 短代码,而没有将它们更改为真实内容。这就是我使用的代码

add_action( 'wp_ajax_drpk_custom','drpk_custom' );
add_action( 'wp_ajax_nopriv_drpk_custom','drpk_custom' );
function drpk_custom(){
if(isset($_REQUEST)){
    $id = $_REQUEST['id'];

    $query = new WP_Query(array('p'=>$id));
    if($query->have_posts()):
        while($query->have_posts()): $query->the_post();?>
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel"><?php the_title() ?></h4>
      </div>
      <div class="modal-body">
         <?php the_content() ?>
      </div>
        <?php endwhile;

    endif;
}
wp_die();  }

而这个 jQuery 代码

    $('.cart-item').find('a').on('click',function(){
    var postID      = $(this).data('id'),
        ajaxContent = $('.modal-content');
        $.ajax({
            url: ajaxUrl.url,
            data: {
                'action' : 'drpk_custom',
                'id': postID
            },
            beforeSend: function(){
                // $load.fadeIn(500);
            },
            success: function(data){
                // $load.hide();
                ajaxContent.html(data);
            }
        }); 
    });

但像那样返回

[vc_row][vc_column width=”1/4″][vc_single_image image=”389″ img_size=”full” alignment=”center” onclick=”custom_link” img_link_target=”_blank” link=”#”][/vc_column][vc_column width=”1/4″][vc_single_image image=”390″ img_size=”full” alignment=”center” onclick=”custom_link” img_link_target=”_blank” link=”#”][/vc_column][vc_column width=”1/4″][vc_single_image image=”391″ img_size=”full” alignment=”center” onclick=”custom_link” img_link_target=”_blank” link=”#”][/vc_column][vc_column width=”1/4″][vc_single_image image=”392″ img_size=”full” alignment=”center” onclick=”custom_link” img_link_target=”_blank” link=”#”][/vc_column][/vc_row]
4

3 回答 3

6

自 4.9 版以来,视觉作曲家添加了简码延迟加载。要在 AJAX 内容上使用 VC 短代码,请在打印内容之前使用此功能WPBMap::addAllMappedShortcodes();

add_action( 'wp_ajax_drpk_custom','drpk_custom' );
add_action( 'wp_ajax_nopriv_drpk_custom','drpk_custom' );
function drpk_custom(){
if(isset($_REQUEST)){
    $id = $_REQUEST['id'];

    $query = new WP_Query(array('p'=>$id));
    if($query->have_posts()):
        while($query->have_posts()): $query->the_post();
            WPBMap::addAllMappedShortcodes();
        ?>
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel"><?php the_title() ?></h4>
      </div>
      <div class="modal-body">
         <?php the_content() ?>
      </div>
        <?php endwhile;

    endif;
}
wp_die();  }
于 2016-06-25T10:10:39.763 回答
3
if(class_exists('WPBMap') && method_exists('WPBMap', 'addAllMappedShortcodes')) { // 1.17c. FIxes issues with ajax hopefully.

                WPBMap::addAllMappedShortcodes(); // this is needed to ensure wc shortocdes come out right.

            }

这将是你想要做的。我个人不知道为什么,但是只要您在启动调用之前使用方法和类检查它就可以工作。我的猜测可能与在 ajax 回调之前运行的过滤器/挂钩有关。

此外,应该注意的是,如果您通过 ajax 在主查询之外运行循环,您希望在每个 $query->the_post() 之后运行它,因为这会为 the_title() 等函数设置上下文;

于 2016-11-25T09:24:10.283 回答
1

要扩展上述解决方案,如果您使用的帖子具有自定义 css 样式更改,例如边框、背景等。您也需要使用该自定义 cssget_post_meta($pid, '_wpb_shortcodes_custom_css', true);

例子:

$thepost = get_post($pid);
WPBMap::addAllMappedShortcodes();
$content = $thepost->post_content;
$content = apply_filters('the_content', $content);
$vccss = get_post_meta($pid, '_wpb_shortcodes_custom_css', true);
if(!empty($vccss)) 
{
    $vccss = strip_tags($vccss);
    $content.='<style type="text/css" data-type="vc_shortcodes-custom-css">';
    $content.=$vccss;
    $content.='</style>';
}           
echo $content;
于 2018-03-04T20:35:51.093 回答