2015-12-29 74 views
2

我試圖創建一個自定義MultiBlog搜索的WordPress,在那裏你可以搜索特定的詞,標籤,作者,類別,日期範圍和註釋中使用Ajax的事先鍵入的內容。ParseError在WordPress多站點

您可以在每個博客搜索,只需選擇博客,或者只是一個。結果很好,但我遇到了一些TypeHead自動完成的問題。

對於標籤,類別和作者只有我通過Ajax使用TypeHead。

我敢肯定,我是從HTML獲取所有值,所以這裏是我JS:

var form = $('#multiselect-search-form'); 
    $('#categories').typeahead({ 
     source: function(query, process) { 
      $.ajax({ 
       url: BaseURL + 'wp-content/plugins/multiblogselect/categories-search.php', 
       type: 'POST', 
       data: form.serialize(), 
       dataType: 'JSON', 
       async: true, 
       success: function(data) { 
        categories = []; 
        map = {}; 
        $.each(data, function (i, categorie) { 
         map[categorie.name] = categorie; 
         categories.push(categorie.name); 
        }); 
        process(categories); 
        console.log(categories); 
       }, 
       error: function(req, err){ console.log('Ajax error ' + err); } 
      }); 
     } 
    }); 

,當我在一個博客只是看(什麼的,只是一個選擇的)其實它工作正常。但是,當我試圖選擇大於1名的博客,我越來越parsererror。

因此,這裏是我的PHP:

獲取價值是好的,我送他們到JS。 $ multiblogselect返回數組中的博客的ID。

if (is_array($multiblogsselect)){ 
     $multiselect = count($multiblogsselect); 
     if ($multiselect === 1) { 
      foreach ($multiblogsselect as $key => $value){ 
       if ($value != 1 && $value > 0) { 
        $tablePrefix = $wpdb->base_prefix.$value.'_'; 
       } else{ 
        $tablePrefix = $wpdb->base_prefix; 
       } 

       $resultCategories = getPostCategories($tablePrefix, $categories); 
       echo json_encode(array_values($resultCategories)); 
      } 
     } else { 
      $resultCategories = array(); 
      for ($i=1; $i<=$multiselect; $i++) { 
       if ($i != 1 && $i > 0) { 
        $tablePrefix = $wpdb->base_prefix.$i.'_'; 
       } else{ 
        $tablePrefix = $wpdb->base_prefix; 
       } 
       $resultCategories = array_merge_recursive($resultCategories, getPostCategories($tablePrefix, $categories)); 
      } 
      echo json_encode(array_values($resultCategories)); 
     } 
} 

這樣我就可以使用任何前綴用於在數據庫中搜索,在一個循環

function getPostCategories($tablePrefix, $categories){ 
    //object_id in term_relationships is post_id 
    global $wpdb; 
    $queryCategories = "SELECT name 
        FROM ".$tablePrefix."term_relationships 
        JOIN ".$tablePrefix."term_taxonomy 
        ON ".$tablePrefix."term_relationships.term_taxonomy_id = ".$tablePrefix."term_taxonomy.term_taxonomy_id 
        JOIN ".$tablePrefix."terms 
        ON ".$tablePrefix."terms.term_id = ".$tablePrefix."term_taxonomy.term_id 
        WHERE ".$tablePrefix."terms.name LIKE '%".$categories."%' 
        AND ".$tablePrefix."term_taxonomy.taxonomy = 'category' 
        "; 
    $resultCategories = $wpdb->get_results($queryCategories); 
    return $resultCategories; 
} 

所以,它工作正常,當我搜索在短短的一個博客,但如果我選擇多博客(獲取ParseError)。

有什麼想法?

編輯:我已經添加了「for」循環,所以我沒有parseerror了。但是,多個博客搜索中返回的數組是空的。 array_merge in cause?

回答

0

試試這個語法:

if (is_array($multiblogsselect)){ 

    $multiselect = count($multiblogsselect); 

    if ($multiselect === 1) { 
     foreach ($multiblogsselect as $key => $value){ 
      if ($value != 1 && $value > 0) { 
       $tablePrefix = $wpdb->base_prefix.$value.'_'; 
      } else { 
       $tablePrefix = $wpdb->base_prefix; 
      } 

      $resultCategories = getPostCategories($tablePrefix, $categories); 
      echo json_encode(array_values($resultCategories)); 
     } 
    } else { 
     $resultcategories = array(); 
     foreach ($multiblogsselect as $key => $value) { 
      if ($value == 1) { 
      $resultCategories[$key] = getPostCategories($tablePrefix = $wpdb->base_prefix, $categories); 
      } else { 
      $resultCategories[$key] = getPostCategories($tablePrefix = $wpdb->base_prefix.$value.'_', $categories); 
      } 
     } 
    echo json_encode(array_values($resultCategories)); 
    } 
}