1 つまたは複数の単語 (つまり、単語、2 つの単語、3 つの単語など) で構成され、変数 (つまり、$meta_keyword_1、 $meta_keyword_2 )。
キーワード検索の結果に基づいてカスタム フィールドを更新する機能があります。stripos を使用して、投稿タイトルからキーワードを検索することに成功しました。stripos を使用して投稿コンテンツを検索することができませんでした。preg_match の例を調査して思いつくことができましたが、コンテンツに完全一致が存在する場合でも、「0」または FALSE を返し続けます。
私の機能内のプロセスは次のとおりです。
1)。キーワードを取得し、検索目的で " " を "-" に置き換えます。
注: メタ キーワードは次のように入力します: 単語、2 単語、および 3 単語、青ウサギ、赤ウサギ
$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;
}
ここに私の結果があります:
投稿コンテンツで見つかった一致キーワード: 単語、2 つの単語
投稿内容にない一致キーワード: blue rabbit, red rabbit
a)。Using '!== false' + $meta_keyword_1 = 'word' ( MATCH ) --> 最初に実行された IF ステートメントは、'0' と 'word' を出力します。
b)。Using '!== false' + $meta_keyword_1 = 'two-words' ( MATCH ) --> 最初に実行された IF ステートメントは、'0' と 'two-words' を出力します。
c)。Using '!== false' + $meta_keyword_1 = 'blue-rabbit' ( NON-MATCH ) --> 最初に実行された IF ステートメントは、'0' と 'blue-rabbit' を出力します。
d)。Using '!== 0' + $meta_keyword_1 = 'word' ( MATCH ) --> 実行された 2 番目の IF ステートメント、$meta_keyword_2 = two-words ( MATCH )、出力 '0' と 'two-words';
e)。Using '!== 0' + $meta_keyword_1 = 'blue-rabbit' ( NON-MATCH ) --> 実行された 2 番目の IF ステートメント、$meta_keyword_2 = red-rabbit ( NON-MATCH )、出力 '0' および 'red-rabbit ';
f)。Using '=== false' + $meta_keyword_1 = 'word' ( MATCH ) --> 実行された 2 番目の IF ステートメント、$meta_keyword_2 = red-rabbit ( NON-MATCH )、出力 '0' および 'red-rabbit';
g)。'=== false' + $meta_keyword_1 = 'blue-rabbit' ( NON-MATCH ) を使用 --> 実行された 2 番目の 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( [ここに何か] .$meta_keyword_2_clean. [ここに何か] , $post->post_content);
これで私の必要性が明確になることを願っています。
更新#2:
Jan のコメント (ありがとう Jan!) の後、この件についてもう少し調査することにしました。同じ質問をした人を、おそらくはるかに正確に見つけることができました。ここで私の問題に答えてください: 完全一致の Strpos。これが他の誰かがこの質問を見つけるのに役立つことを願っています。