gpt4 book ai didi

php - 具有多个后元值关键字的 Wordpress 搜索(无插件)

转载 作者:搜寻专家 更新时间:2023-10-31 21:55:27 24 4
gpt4 key购买 nike

我到处搜索这个问题的答案,并一直在寻找不同的建议,但似乎没有一个能满足我的特殊需求。我目前有一个使用自定义搜索(无插件)的网站。网址:GayBarsIn.com

我发现搜索功能可用于搜索自定义帖子标题帖子元数据(高级自定义字段)以及标题和帖子元数据的组合,但仅一个帖子元关键字有效。我正在尝试找到一种方法来搜索多个 发布元关键字。


例如:该站点显示酒吧列表。

  • 如果我搜索单个关键字...说“克利夫兰”,它将返回所有带有该关键字的列表(无论是在标题中还是在帖子元中)。
  • 如果我搜索“Cleveland Ohio”,它只会返回在标题中第一个,在帖子元中然后找到的值,但只会返回一个帖子实例元。因此,如果标题中有 Cleveland 而后元数据中有 Ohio,它会返回这些结果,但不会显示包含两个带有关键字“Cleveland Ohio”的后元数据实例的结果。

我需要它做的是使用多个搜索词显示所有帖子元(自定义字段)的结果。示例:“克利夫兰俄亥俄州”或“夜总会酒廊休斯顿”


这是我发现的适用于单个关键字搜索的代码:

/* ========================================
* SEARCH CUSTOM POST TYPES
* ======================================== */

function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type', array('listing'));
}
return $query;
}
add_filter('pre_get_posts','searchfilter');

function cf_search_join( $join ) {
global $wpdb;

if ( is_search() ) {
$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}

return $join;
}
add_filter('posts_join', 'cf_search_join' );

/**
* Modify the search query with posts_where
*
* http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
*/
function cf_search_where( $where ) {
global $pagenow, $wpdb;

if ( is_search() ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
}

return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

/**
* Prevent duplicates
*
* http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
*/
function cf_search_distinct( $where ) {
global $wpdb;

if ( is_search() ) {
return "DISTINCT";
}

return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );


代码写到一半,这部分好像是应该编辑的,但我不知道怎么编辑。我试过将“或”切换为“和”,但没有返回任何结果。

    if ( is_search() ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
}


如果之前有人问过这个问题,我深表歉意。我已经找了几天,发现其他人围绕着我正在尝试做的事情转来转去,但还不够具体,无法为我工作。非常感谢任何帮助或指导!

最佳答案

您应该创建自己的带有用于搜索的输入字段的表单,并在发布后捕获数据。例如,您可以使用 explode() 拆分单词并将它们放入一个数组中。您需要检查单词是否作为标签存在,因此您需要遍历数组并检查它是否存在于 get_tags($args) 中。之后你应该有一个只包含有用标签的数组。现在你可以使用 get_posts()

$postargs = array(
'posts_per_page' => '-1',
'tag__and' => YOUR_ARRAY,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => YOUR_CUSTOM_POST_TYPE,
'post_status' => 'publish',
'suppress_filters' => true

);

$posts_array = get_posts( $postargs );

您只需要循环 (foreach) 遍历后数组并输出结果。

关于php - 具有多个后元值关键字的 Wordpress 搜索(无插件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com