0

我试图弄清楚如何有效地在帖子内容中搜索可以由一个或多个单词(即单词、两个单词和三个单词等)组成并使用变量(即 $meta_keyword_1, $meta_keyword_2 )。

我有一个根据关键字搜索结果更新自定义字段的功能。我已经成功地使用 stripos 在帖子标题中搜索关键字。我无法成功使用 stripos 搜索帖子内容。我能够研究并提出 preg_match 的示例,但即使内容中存在完全匹配,它也会不断返回“0”或 FALSE。

以下是我的职能范围内的流程:

1)。检索关键字并将“-”替换为“”以进行搜索:

注意:元关键字输入为:word, two-words, and-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;

}

这是我的结果:

匹配在帖子内容上找到的关键字:单词,两个单词

匹配帖子内容中未找到的关键字:蓝兔,红兔

一个)。使用 '!== false' + $meta_keyword_1 = 'word' ( MATCH ) --> 执行第一个 IF 语句,输出 '0' 和 'word';

乙)。使用 '!== false' + $meta_keyword_1 = 'two-words' ( MATCH ) --> 执行第一个 IF 语句,输出 '0' 和 'two-words';

C)。使用 '!== false' + $meta_keyword_1 = 'blue-rabbit' ( NON-MATCH ) --> 执行第一个 IF 语句,输出 '0' 和 'blue-rabbit';

d)。使用 '!== 0' + $meta_keyword_1 = 'word' ( MATCH ) --> 第二个 IF 语句执行,$meta_keyword_2 = two-words ( MATCH ),输出 '0' 和 'two-words';

e)。使用 '!== 0' + $meta_keyword_1 = 'blue-rabbit' (NON-MATCH) --> 第二个 IF 语句执行,$meta_keyword_2 = red-rabbit (NON-MATCH),输出 '0' 和 'red-rabbit ';

F)。使用 '=== false' + $meta_keyword_1 = 'word' ( MATCH ) --> 第二个 IF 语句执行,$meta_keyword_2 = red-rabbit (NON-MATCH),输出 '0' 和 'red-rabbit';

G)。使用 '=== false' + $meta_keyword_1 = 'blue-rabbit' (NON-MATCH) --> 执行第二个 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->post_content);

这及其变体会产生错误:

preg_match('/'.$meta_keyword_2_clean.'/', $post->post_content);

我正在寻求帮助来制作这个:

preg_match( [something-here] .$meta_keyword_2_clean. [something-here] , $post->post_content);

我希望这能澄清我的需求。

更新#2:

在 Jan 的评论(谢谢 Jan!)之后,我决定对该主题进行更多研究,并且我能够找到提出相同问题的人,也许精度更高。在这里回答我的问题: 具有完全匹配的 Strpos。我希望这可以帮助其他人找到这个问题。

4

0 回答 0