Вопрос или проблема
У меня есть проблема на моем сайте WordPress. На фронтенде всем виден спам-пост (не комментарий, а пост). Я не знаю, откуда он пришел, и все проверки на вредоносные программы до сих пор были отрицательными. Однако для решения этой проблемы мне нужно удалить этот пост. Но его нельзя увидеть в админке.
Как видно на приведенном скриншоте, в разделе постов указано “все посты” с количеством 58. Однако при просмотре через пагинацию видно только 57. Поскольку я не могу найти спам-пост обычными методами поиска, я предполагаю, что спам-пост каким-то образом был скрыт. В корзине или где-либо еще нет постов. Я также проверил страницы, категории, теги и т. д., но ничего не нашел.
Есть ли способ в конце концов удалить его?
Я бы попробовал
-
открыть спам-пост в вашем браузере и найти ID поста. Он будет в теге rel=”shortlink” в HTML заголовке:
<link rel="shortlink" href="https://example.com/?p=123" />
или как класс
page-id-123
или подобный в теге body:<body class="page-template-default page page-id-123 logged-in admin-bar no-customize-support">
-
вставить этот ID в ваш обычный URL редактирования поста, например:
https://example.com/wp-admin/post.php?post=123&action=edit
После этого вы сможете редактировать или удалить спам-пост оттуда. Если это не сработает, найдите этот ID в таблице wp_posts вашей базы данных и посмотрите, почему он не отображается, или просто удалите его из wp_posts и wp_postmeta.
Или если вы хотите выяснить, почему количество постов различается, я бы сравнил SQL-запросы, которые использует WordPress для подсчета постов и их списка, например, с помощью плагина Query Monitor.
Я обнаружил, что WordPress НЕ показывает посты в Списке постов (в wp-admin), если у поста нет пользователя.
По какой-то причине моя база данных WP не имеет ограничения внешнего ключа, требующего наличия действительного wp_user для каждого wp_post::post_author. Я не уверен, является ли это задумкой или хакер убрал ограничение ключа.
В любом случае, если вы выполните следующую SQL-команду, вы увидите список всех постов с отсутствующим автором:
select id,post_author, post_status, post_title from wp_posts where post_author not in (select id from wp_users);
Затем я создал нового пользователя “SirSpamALot” и переназначил все посты этому пользователю.
update wp_posts set post_author=THE_NEW_USER_ID where post_author=INVALID_USER_ID;
Теперь я вижу в списке постов и могу использовать обычные кнопки WP для удаления постов.
Довольно глупо, что wp-admin не показывает посты, но с радостью предоставляет их посетителям.
После того как вы удалили пост и переместили его в корзину, используйте плагин Advanced DB Cleaner, чтобы очистить невидимые посты из Корзины. Надеюсь, это поможет.
Ответ или решение
У вас возникла проблема с тем, что на вашем сайте WordPress виден спам-пост на фронтенде, но его не видно в админке. Это может быть вызвано тем, что пост был создан пользователем, который больше не существует в базе данных. Ниже представлены шаги для решения этой проблемы.
-
Определите ID спам-поста:
Откройте спам-пост в вашем браузере и найдите его ID в HTML-коде. Это можно сделать, проверив тег в заголовке страницы:<link rel="shortlink" href="https://example.com/?p=123" />
Или в классе тега body:
<body class="page-template-default page page-id-123 logged-in admin-bar no-customize-support">
-
Редактируйте пост через админ-панель:
После того как вы получили ID, скомпонуйте URL для редактирования поста:https://example.com/wp-admin/post.php?post=123&action=edit
Это должно позволить вам открыть редактор для спам-поста, где вы сможете его удалить.
-
Проверьте базу данных:
Если предыдущий шаг не сработал, выполните следующий SQL-запрос в вашей базе данных, чтобы найти все посты без действующих авторов:SELECT id, post_author, post_status, post_title FROM wp_posts WHERE post_author NOT IN (SELECT id FROM wp_users);
Это покажет вам все посты, авторы которых больше не существуют.
-
Создайте нового пользователя:
Создайте нового пользователя в системе (например, "SirSpamALot"). После этого можно переприсвоить все спам-посты созданному пользователю с помощью следующего SQL-запроса:UPDATE wp_posts SET post_author=НОВЫЙ_ID_ПОЛЬЗОВАТЕЛЯ WHERE post_author=НЕВАЛИДНЫЙ_ID_ПОЛЬЗОВАТЕЛЯ;
-
Удалите спам-пост:
После изменения автора вы сможете видеть и управлять спам-постами через админку WordPress. Удалите их, если это необходимо, и переместите в корзину. -
Очистите корзину:
Используйте плагин Advanced DB Cleaner для удаления невидимых постов из корзины. Это поможет избежать путаницы в будущем. -
Примените дополнительные меры безопасности:
Рассмотрите возможность установки плагинов безопасности для предотвращения появления спам-постов в будущем. Также убедитесь, что ваши плагины и темы обновлены до последних версий, чтобы избежать потенциальных уязвимостей.
Эти шаги должны помочь вам найти и удалить невидимый спам-пост из вашего сайта WordPress. Если у вас есть дополнительные вопросы или возникнут сложности на каком-либо этапе, не стесняйтесь обращаться за помощью.