Использование preg_match Проверьте, существует ли ключевое слово в WordPress Post Content

Я пытаюсь выяснить, как эффективно выполнять поиск в содержании публикации по ключевому слову, которое может состоять из одного или нескольких слов (например, слова, двух слов и трех слов и т. Д.) И извлекаться с использованием переменной (т. Е. $ 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:

После комментария Яна я решил немного подробнее изучить эту тему (спасибо, Ян!), И мне удалось найти человека, который задавал тот же вопрос, возможно, с гораздо большей точностью. Ответьте на мою проблему здесь: Стрпос с точными совпадениями. Я надеюсь, что это поможет кому-то еще найти этот вопрос.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]