Wordpress:在ajax函数中执行do_shortcode()

时间:2016-12-20 18:14:51

标签: php wordpress

我实现了一个wordpress前端php页面,其中包含正文中的超链接列表和页脚中的wpdatatable。

我想在每次用户选择链接时重新加载数据表,这需要通过ajax完成,而不需要重新加载整个页面。

到目前为止我做了什么:
我在 \ wp-content \ themes \ Avada \ functions.php 中定义了我的操作,如下所示:

function tenders_shortcode() {
    echo do_shortcode("[wpdatatable id=49 var1=".$_POST['id']." var2=".$GLOBALS['cgv']['archive']."]");
}

add_action('wp_ajax_tenders_shortcode', 'tenders_shortcode'); // add action for logged users
add_action( 'wp_ajax_nopriv_tenders_shortcode', 'tenders_shortcode' ); // add action for unlogged users

在我的主页内,我发出了以下ajax调用:

function toggleTable(ministryId) {


    $.post( '<?php echo admin_url('admin-ajax.php'); ?>', {    
      action: "tenders_shortcode",
      id: ministryId
    }, function(datatable) {
      alert("success");
      jQuery("#tendersResult").html(datatable)
    });

}

其中&#34; tendersResult&#34; 是一个应该保存数据表的div。

问题是返回的数据表的html包含css链接标记,它总是显示&#34; 0&#34;。

以下是它在浏览器中的显示方式,请参阅0文本:

enter image description here

这就是它在检查员中的显示方式:

enter image description here

请注意,在发布我的问题之前,我做了很多研究,并没有解决我的问题。 任何帮助表示赞赏!!

更新:好的,所以我已经按照Fencer04的建议添加了wp_die(),但我现在的问题是do_shortcode()仍然会返回&#34;&#34;标题中的css标记和数据表返回为&#34; display:none&#34;

1 个答案:

答案 0 :(得分:1)

您需要将功能更改为:

function tenders_shortcode() {
    echo do_shortcode("[wpdatatable id=49 var1=".$_POST['id']." var2=".$GLOBALS['cgv']['archive']."]");
    wp_die(); //Added
}

add_action('wp_ajax_tenders_shortcode', 'tenders_shortcode'); // add action for logged users
add_action( 'wp_ajax_nopriv_tenders_shortcode', 'tenders_shortcode' ); // add action for unlogged users

如果函数末尾没有wp_die(),它将永远不会返回零以外的任何内容。