Я пытаюсь выяснить, как эффективно выполнять поиск в содержании публикации по ключевому слову, которое может состоять из одного или нескольких слов (например, слова, двух слов и трех слов и т. Д.) И извлекаться с использованием переменной (т. Е. $ Meta_keyword_1, $ meta_keyword_2).
У меня есть функция, которая обновляет настраиваемые поля на основе результатов поиска по ключевым словам. Я был успешным в поиске заголовка сообщения по ключевому слову, используя стрипы. Я НЕ смог успешно использовать стрипы для поиска контента в постах. Я смог исследовать и придумать пример preg_match, но он продолжает возвращать «0» или FALSE, даже когда в контенте присутствует точное совпадение.
Вот процессы в моей функции:
1). Извлеките ключевое слово и замените «-» на «» в целях поиска:
ПРИМЕЧАНИЕ. Мета-ключевое слово вводится как: слово, два слова и три слова, синий кролик, красный кролик
$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) -> First
Оператор IF выполнен, выведите «0» и «слово»;б). Использование ‘! == false’ + $ meta_keyword_1 = ‘two-words’ (MATCH) ->
Первый оператор IF выполнен, выведите «0» и «два слова»;с). Использование ‘! == false’ + $ meta_keyword_1 = ‘blue-rabbit’ (NON-MATCH)
-> Выполнен первый оператор IF, выведите ‘0’ и ‘blue-rabbit’;г). Использование ‘! == 0’ + $ meta_keyword_1 = ‘word’ (MATCH) -> Second IF
инструкция выполнена, $ meta_keyword_2 = два слова (MATCH), вывод ‘0’
и «два слова»;е). Использование ‘! == 0’ + $ meta_keyword_1 = ‘blue-rabbit’ (NON-MATCH) ->
Выполнен второй оператор IF, $ meta_keyword_2 = red-rabbit (NON-MATCH
), выведите ‘0’ и ‘red-rabbit’;е). Использование ‘=== false’ + $ meta_keyword_1 = ‘word’ (MATCH) -> Second
Оператор IF выполнен, $ meta_keyword_2 = красный кролик (NON-MATCH),
выведите ‘0’ и ‘red-rabbit’;г). Использование ‘=== 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 ), которые вводятся, и модификаторы, которые идут до и после.
Это всегда дает ЛОЖНЫЙ результат:
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:
После комментария Яна я решил немного подробнее изучить эту тему (спасибо, Ян!), И мне удалось найти человека, который задавал тот же вопрос, возможно, с гораздо большей точностью. Ответьте на мою проблему здесь: Стрпос с точными совпадениями. Я надеюсь, что это поможет кому-то еще найти этот вопрос.
Задача ещё не решена.
Других решений пока нет …