我试图找出如何有效地在帖子内容中搜索关键字,该关键字可以由一个或多个单词(即单词,两个单词和三个单词等)组成,并使用变量检索(即$ meta_keyword_1,$ meta_keyword_2)。
我有一个根据关键字搜索结果更新自定义字段的功能。我成功地使用stripos搜索关键字的帖子标题。我无法成功使用stripos来搜索帖子内容。我能够研究并提出一个preg_match的例子,但即使内容中存在完全匹配,它也会一直返回'0'或FALSE。
以下是我职能部门的流程:
1)。检索关键字并将“ - ”替换为“”以用于搜索目的:
注意:Meta关键字输入为:word,two-words和-three-words,blue-rabbit,red-rabbit
$meta_keyword_1_clean = str_replace("-", " ", $meta_keyword_1);
$meta_keyword_2_clean = str_replace("-", " ", $meta_keyword_2);
2)。搜索IF关键字存在于帖子内容中:
$post_content_strip_1 = preg_match('/('.$meta_keyword_1_clean.')/', $post->post_content);
$post_content_strip_2 = preg_match('/('.$meta_keyword_2_clean.')/', $post->post_content);
3)。如果关键字存在则执行IF语句,否则继续执行下一个IF语句:
<?php
elseif ( $post_content_strip_1 !== false ) {
// For testing purposes, Update post meta #1 with $post_content_strip_1 value
// Update post meta #2 with $meta_keyword_1 value
} elseif ( $post_content_strip_2 !== false ) {
// For testing purposes, Update post meta #1 with $post_content_strip_2 value
// Update post meta #2 with $meta_keyword_2 value
} else {
return false;
}
以下是我的结果:
匹配在帖子内容中找到的关键字:字,两个字
匹配关键字未在帖子内容中找到:蓝兔,红兔
A)。使用'!== false'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第一 执行IF语句,输出'0'和'word';
B)。使用'!== false'+ $ meta_keyword_1 ='双字'(MATCH) - &gt; 执行第一个IF语句,输出'0'和'双字';
C)。使用'!== false'+ $ meta_keyword_1 ='blue-rabbit'(非匹配) - &GT;执行第一个IF语句,输出'0'和'blue-rabbit';
d)。使用'!== 0'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第二个IF 执行语句,$ meta_keyword_2 =双字(MATCH),输出'0' 和'双字';
E)。使用'!== 0'+ $ meta_keyword_1 ='blue-rabbit'(非匹配) - &gt; 执行第二个IF语句,$ meta_keyword_2 = red-rabbit(NON-MATCH ),输出'0'和'red-rabbit';
F)。使用'=== false'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第二 IF语句执行,$ meta_keyword_2 = red-rabbit(NON-MATCH), 输出'0'和'red-rabbit';
克)。使用'=== false'+ $ meta_keyword_1 ='blue-rabbit'(非匹配) - &GT;第二个IF语句执行,$ meta_keyword_2 = red-rabbit(NON-MATCH),输出'0'和'red-rabbit';
我的问题:
1)。我觉得preg_match模式没有正确设置以产生找到或未找到的准确结果。我以前使用preg_match的尝试不会产生一个值(即0或1),我已经能够在这方面取得进展;
2)。我的关键字以小写字母输入,但帖子内容可能会有所不同。搜索应该不区分大小写,我相信这是通过模式末尾的'/ i'来实现的;
如果您认为我遗失了什么,请告诉我。任何帮助将不胜感激。
提前致谢!
更新#1:
为了更好地说明我的问题,我相信我的关键字搜索帖子内容失败的原因是因为preg_match模式设置不正确。复杂性,包括我缺乏理解,是输入的变量( $ meta_keyword_1_clean或$ meta_keyword_2_clean ),以及之前和之后的修饰符。
始终产生FALSE结果:
preg_match('/('。$ meta_keyword_2_clean。')/',$ post-&gt; post_content);
此及其变体会产生错误:
preg_match('/'。$ meta_keyword_2_clean。'/',$ post-&gt; post_content);
我正在寻求帮助:
preg_match( [something-here] 。$ meta_keyword_2_clean。 [something-here] ,$ post-&gt; post_content);
我希望这能澄清我的需要。
更新#2:
我决定在Jan的评论之后再研究一下这个主题(谢谢Jan!),我找到了一个问同样问题的人,也许还有更好的精确度。在这里回答我的问题:Strpos with exact matches。我希望这有助于其他人找到这个问题。