2013-02-20 27 views
0

我有一个奇怪的问题。 我有两个html列表,当我选择一个地区时,它向wordpress发送ajax请求并返回该地区省份的列表。 问题是,即使他没有正确接收数据,我们未登录时,wordpress的get_terms()函数也不会检索任何省份。无法检索与WordPress的条款,当没有用AJAX请求登录

这是代码,希望有人能帮助我。

<?php 
/* 
Plugin Name: Ajax Départements 
Description: Récupère les sous categories(départements) d'une categorie(région) 
Version: 0.1 
Author: EnessFr 
*/ 

//Enregstrement du trigger et du callback 
add_action('wp_ajax_dpt-ajax-request', 'ajaxGetDepartement'); 
add_action('wp_ajax_nopriv_dpt-ajax-request', 'ajaxGetDepartement'); 

//insertion du script 
wp_enqueue_script('dpt-ajax-request', plugin_dir_url(__FILE__) . 'ajax.js', array('jquery'), null, true); 

//Enregistrement de l'url ajax 
wp_localize_script('dpt-ajax-request', 'dptAjaxRequest', array('ajaxurl' => admin_url('admin-ajax.php'))); 

//callback ajax 
function ajaxGetDepartement(){ 
$departements = null; 
$regionToExclude = array(); 
$tmpRegionName = $_POST['region']; 

//Récupération des régions parents 
$regionsParents = get_terms('category',array(
    'parent' => 0, 
    'hide_empty' => false, 
    )); 

foreach($regionsParents as $rg){ 
    array_push($regionToExclude, $rg->term_id); 
} 
array_push($regionToExclude, 1); // 1 = catégorie non-classé 

//Récupération de la région passée en arguments 
if(strval($_POST['region']) != 'wqsftaxoall'){ // une région valable est reçus 
    $tmpRegion = get_terms('category',array(
     'slug' => $tmpRegionName, 
     'hide_empty' => false, 
     ) 
    ); 

    $regionParent = $tmpRegion[0]->term_id; 

    //Récupération des départements 
    $departements = get_terms('category',array(
     'child_of' => $regionParent, 
     'hide_empty' => false, 
     'orderby' => 'name', 
     'order' => 'ASC', 
     'exclude' => $regionToExclude, 
     )); 
}else{ //récupération de tous les départements 

    //Récupération des départements 
    $departements = get_terms('category',array(
     'hide_empty' => false, 
     'orderby' => 'name', 
     'order' => 'ASC', 
     'exclude' => $regionToExclude, 
     )); 

} 

//Construction et afichage des résultats 
$options = '<option selected value="wqsftaxoall">Tous les départements</option>'; 

foreach($departements as $dpt){ 
    $options .= '<option value="'.$dpt->slug.'">'.$dpt->name.'</option>'; 
} 

echo $options; 
die(); 
} 

?> 

编辑:看来问题是get_terms函数返回时,没有登录用户执行THA AJAX调用空数组。当用户登录时,该数组包含类别列表。

编辑2:我仍然有问题,搜索谷歌,我找不到任何人有同样的问题。我不知道现在该怎么做,也许我错过了一些东西,但我不知道是什么。请帮帮我 :)。

+0

你有没有检查过,当你没有在ajaxurl中闲逛@你的正面和你的请求被正确调用你有没有测试过这个提醒返回的数据? – 2013-02-20 09:17:25

+0

是的,网址是可用的,它返回的选项值是'<选择值=“wqsftaxoall”> Tous lesdépartements'。 另外,我做了一个$ departements和$ tmpRegion的var_dump,它们是null。但$ _POST ['region']包含期望值。 – 2013-02-20 09:20:01

回答

0

我得到了答案!它是一个插件:角色范围。它对分类法施加了限制,我没有检查对这个特定的taxo的限制,现在它可以工作。

0

尽量让类型的Ajax请求POST

别的尝试$ _REQUEST而不是作为默认$ _ POST将请求类型为$ _GET是的导致您的案例的问题

+0

尝试使用$ _REQUEST它工作吗? – 2013-02-20 09:49:46

+0

我试过了,结果是一样的。我的ajax请求已经是POST类型。这是我的Ajax代码: \t //因为2.8 ajaxurl在管理员头部和点总是被定义为Admin-ajax.php jQuery.ajax({ \t类型: 'POST', \t网址: “网址” , \t数据:{ \t动作: 'DPT-AJAX请求', \t \t \t区域:regionValue, \t}, \t成功:功能(结果){ \t \t \t $('#taxo-1 ').html(results); \t} \t}); 我无法确定如何在评论中格式化代码,对不起。 – 2013-02-20 09:49:51

+0

你试过了$ _REQUEST吗? – 2013-02-20 09:54:26