我正在尝试使用自定义的autocomplete建议列表构建wordpress搜索。我想仅将搜索限制为标记,如果用户键入适合任何标记或多个标记的搜索查询,则自动完成列表应返回与此/这些标记关联的所有帖子。
例如,输入“Jazz”可以给出:
Jazz
Post 1
Post 2
Post 3
Post 4
Post 5
Jazz House
Post 1
Post 2
Post 3
Great Jazz Trio
Post 1
…
有一个自动填充example, working with categories。这可能导致正确的方向,但这里的搜索查询是将在其类别下列出的“帖子”。我需要用户搜索类别(标签)以列出与之关联的所有帖子。
我认为可以创建所有标签的对象数组。每个对象(标签)都可以包含所有相关帖子。该数组可以作为自动完成的数据源。
我对如何处理这个问题的任何建议感到高兴。
答案 0 :(得分:0)
global $wpdb;
// search term provided by user
$s = 'jazz';
$query = '
SELECT wp.post_title AS label, wt.name AS category
FROM `wp_posts` wp
INNER JOIN `wp_term_relationships` wtr ON (wp.`ID` = wtr.`object_id`)
INNER JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
INNER JOIN `wp_terms` wt ON (wt.`term_id` = wtt.`term_id`)
WHERE wp.post_type="post" AND wp.post_status="publish" AND wtt.taxonomy = "post_tag" AND wt.name LIKE "%%%s%%"
ORDER BY wt.name, wp.post_date DESC';
$posts = $wpdb->get_results( $wpdb->prepare( $query, $s ) );
如果我没弄错,你的目标是将数据数组提供给jQuery UI Autocomplete插件,如this示例中所示。这样做的最快方式(在性能方面)是创建一个自定义查询,该查询将加入wp_posts
和wp_terms
表,具体取决于用户提供的搜索词。转换为json(json_encode( $posts ))后,查询的结果将采用适合自动完成插件的格式:
[
{ label: "Post 1", category: "Great Jazz Trio" },
{ label: "Post 1", category: "Jazz" },
{ label: "Post 2", category: "Jazz" },
{ label: "Post 3", category: "Jazz" },
{ label: "Post 4", category: "Jazz" },
{ label: "Post 5", category: "Jazz" },
{ label: "Post 1", category: "Jazz House" },
{ label: "Post 2", category: "Jazz House" },
{ label: "Post 3", category: "Jazz House" }
]
答案 1 :(得分:0)