如果通过admin-ajax.php的回调函数调用IS_SIGNAL(),则不起作用

时间:2014-03-16 作者:Faisal Khurshid

在我的single.php 我有一些这样的代码。。。

if(is_singular(\'post\')) {
   echo \'Blog\';
} else {
   echo \'CPT\';
} 
如果我接近single.php 通过使用从博客或CPT索引页the_permalink(), 此条件正常工作。当我打开单个博客帖子时,它会显示“Blog”,当我打开单个CPT时,它会显示“CPT”。

现在的问题是如果方法single.php 通过的某个回调函数admin-ajax.php 它总是呼应“CPT”,即使我点击一个博客帖子链接。我的ajax回调函数是这样的。。。

    function ajax_callback() {

        get_template_part( \'single\', \'portfolio\' );

        die(); // to avoide 0 at the end

    }
    add_action(\'wp_ajax_ajax_callback\', \'ajax_callback\');
    add_action(\'wp_ajax_nopriv_ajax_callback\', \'ajax_callback\');

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

AJAX请求是new 请求到服务器,这是对admin-ajax.php. 那不是一个单一的帖子页面。任何逻辑取决于is_single() 或者任何其他类似的页面级模板标记都无法工作。如果AJAX回调需要此类信息,则必须在AJAX请求中将其传递给该回调,例如:

function my_enqueue($hook) {
    wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my_query.js\', __FILE__ ), array(\'jquery\'));
    if( is_single() ) {
      // in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
      wp_localize_script( 
    \'ajax-script\', 
    \'ajax_object\',
        array( \'is_single\' => true ) 
      );
    }
}
add_action( \'wp_enqueue_scripts\', \'my_enqueue\' );
然后,您的ajax请求将包括ajax_object.is_single 作为查询参数的一部分,如this example from the Codex, 已通过ajax_object.we_value 通过aswhatever

jQuery(document).ready(function($) {
    var data = {
        action: \'my_action\',
        whatever: ajax_object.we_value      // We pass php values differently!
    };
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations
    jQuery.post(ajax_object.ajax_url, data, function(response) {
        alert(\'Got this from the server: \' + response);
    });
});
然后,您的回调可以通过访问数据$_POST.

结束

相关推荐

通过函数/筛选器更改自定义发布类型SINGLE_NAME

我正在使用woocommerce插件开发电子商务网站。我的客户将在线售票。woocommerce插件创建自定义帖子类型“Product”。我想将这个cpt singular\\u名称更改为“Ticket”(只是表面上的更改)我可以按照其他woocommerce功能的要求将cpt slug保留为“产品”吗?wordpress中是否有任何函数/过滤器可以通过函数/过滤器更改自定义帖子类型singular\\u名称