我正在尝试为WordPress创建自定义MultiBlog搜索,您可以在其中搜索特定的字词,标签,作者,类别,日期范围和评论。
您可以在每个博客中搜索,只搜索选定的博客,或只搜索一个博客。结果很好,但我在使用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个博客时,我发现了解析错误。
所以这是我的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)则不行。
有什么想法吗?
编辑:我已经添加&#34;用于&#34;循环,所以我不再有parseerror了。但是,多个博客搜索时返回的数组为空。 array_merge in cause?答案 0 :(得分: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));
}
}