2012-04-05 48 views
1

嗨Stack Overflow社區。WordPress的:用Ajax更改查詢循環?

我正在爲撒旦開發一個wordpress網站。首先,我是一個初級的web開發者,所以我們說我還有很多東西需要學習... :-)這是我第一次使用Ajax,而且我沒有太多的PHP經驗或者wordpress以外的SQL。

這個網站有基於複選框的搜索功能。我有2個3個複選框組(總共6個)。所以,我有2個分類法,每個複選框代表一個不同的術語。我想根據Satan使用這些複選框選擇的類別,使用ajax更改頁面內容。我能夠做到這一點,但一次只能用於複選框的一個組合。因爲有幾十種不同的組合,我不認爲寫幾十個不同的查詢/ ARGS(每個組合)是一個很好的政策。那麼,我該怎麼做?

讓我們看一個例子,讓你明白我的意思:

試想一下,撒旦要檢查中靈魂的地獄槽的形式。有兩組複選框,一個人,一個用於懲罰,這樣的事情:

人民

  • 男性
  • 女性
  • 兒童

處罰

  • 在火焰
  • 刺穿
  • 正在被惡魔

吃過現在,我有這樣的jQuery的Ajax代碼:

$('#searchsouls').click(function(){ 
    $.ajax({ 
     url:"<?php echo get_bloginfo('template_url'); ?>/evil-laugh.php", 
     type:"POST", 
     async:"false", 
     data:$("#de-form").serialize(), 
     success:function(data) { 
      $('#666').empty().html(data); 
     }, 
     error:function(e){ 
      console.log('Error: ' + e); 
     } 
    }); 
    return false; 
}) 

這工作得很好。然後,我有這樣的代碼惡laugh.php內:

<?php global $query_string; 
$args = wp_parse_args($query_string); 
$args = array(
'post_type' => 'souls', 
'paged' => $paged, 
'orderby' => 'title', 
'order' => 'ASC', 
'posts_per_page' => -1, 
'post_status' => 'publish', 
); 

?> 

<!-- THE LOOP --> 
<?php $wp_query = new WP_Query($args); ?> 
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?> 

這當然顯示了所有的靈魂和各種懲罰,沒有任何幻想。我知道我能做到什麼撒旦希望通過定義類別中的各組合一組不同的參數。喜歡的東西(假設「刺穿」一詞具有9的ID,並且「cat9」是複選框的名稱):

if ($_POST['cat9']) { 
$args = array(
'post_type' => 'souls', 
'paged' => $paged, 
'orderby' => 'title', 
'order' => 'ASC', 
'posts_per_page' => -1, 
'post_status' => 'publish', 
'punishment' => 'impaled', 
); 

然而,有幾十個不同的組合。下面是幾個例子:

  • 男子刺穿
  • 婦女和兒童被惡魔
  • 男性或者女性吃在火焰或刺穿
  • 兒童在火焰或刺穿或者被惡魔吃掉

我想我可以做某種「for循環」來完成這一點,但我不知道如何做到這一點,或者我可以如何將類別ID添加到wordpress查詢中,從而定義各自的AND和OR。

我真的很感謝這個問題的一些幫助。但是,請記住,我不想只是一個解決方案,我想了解我在做什麼,並儘可能學習一些新的東西。

在此先感謝。

回答

5

好吧,我設法自己找到了解決方案。不知道它是否是針對這類問題的最強大的解決方案,但在這種情況下,有人會在尋找同樣的事情。 由於實際原因,我將每個複選框的名稱更改爲相關類別的名稱。因此,例如,對於「Men」複選框,我使用了name="Men",對於其他類別也是如此。這裏的代碼:

if ($_POST['men']) { 
    $args['people']='men'; 
} 

if ($_POST['women']) { 
    if ($_POST['men']) { 
     if ($_POST['children']) { 
      $args['people']='men, women, children'; 
     } else { 
      $args['people']='men, women'; 
     } 
    } else { 
     $args['people']='women'; 
    } 
} 

if ($_POST['children']) { 
    if ($_POST['women']) { 
     if ($_POST['men']) { 
      $args['people']='men, women, children'; 
     } else { 
      $args['people']='women, children'; 
     } 
    } elseif ($_POST['men']) { 
     $args['people']='men, children'; 
    } else { 
     $args['people']='children'; 
    } 
} 

我有懲罰類別相同的代碼,當然有不同的條款。我相信我的代碼仍然存在某種冗餘,但效果很好。我將不得不在稍後檢查。當然,這隻適用於3類,如果你有很多類別,你不會有很多有趣的編程,所以最好考慮如何使用「for循環」或類似的。乾杯!

更新:新的和更好的解決方案

最後,我設法回到這個項目。不僅我學習了更多關於PHP的知識,現在代碼更加健壯,我可以根據需要添加儘可能多的分類術語。這裏所說:

$people_args = array(
    'type' => 'souls', 
    'taxonomy' => 'people', 
    'orderby' => 'name', 
    'order' => 'ASC', 
); 
$people = get_categories($people_args); 
$arr_people = array(); 
foreach ($_POST as $key => $value) { 
    foreach($people as $person){ 
     if($person->slug == $key){ 
      array_push($arr_people, $key); 
     } 
    }    
} 
$values_people = implode(",", $arr_people); 
$args['people']=$values_people; 

$punishment_args = array(
    'type' => 'souls', 
    'taxonomy' => 'punishment', 
    'orderby' => 'name', 
    'order' => 'ASC', 
); 
$punishments = get_categories($punishment_args); 
$arr_punishment = array(); 
foreach ($_POST as $key => $value) { 
    foreach($punishments as $punishment){ 
     if($punishment->slug == $key){ 
      array_push($arr_punishment, $key); 
     } 
    }    
} 
$values_punishment = implode(",", $arr_punishment); 
$args['punishment']=$values_punishment; 

不知道,如果有人有興趣在此,但這裏是我的解決方案爲止。這是一種全功能的AJAX方法,使用複選框按類別顯示內容。只要網站完成,我會在這裏放置網址,以便您可以測試此代碼。 知識就是力量。