Невидимый спам-пост в бэкенде

Вопрос или проблема

У меня есть проблема на моем сайте 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 виден спам-пост на фронтенде, но его не видно в админке. Это может быть вызвано тем, что пост был создан пользователем, который больше не существует в базе данных. Ниже представлены шаги для решения этой проблемы.

  1. Определите 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">
  2. Редактируйте пост через админ-панель:
    После того как вы получили ID, скомпонуйте URL для редактирования поста:

    https://example.com/wp-admin/post.php?post=123&action=edit

    Это должно позволить вам открыть редактор для спам-поста, где вы сможете его удалить.

  3. Проверьте базу данных:
    Если предыдущий шаг не сработал, выполните следующий SQL-запрос в вашей базе данных, чтобы найти все посты без действующих авторов:

    SELECT id, post_author, post_status, post_title FROM wp_posts WHERE post_author NOT IN (SELECT id FROM wp_users);

    Это покажет вам все посты, авторы которых больше не существуют.

  4. Создайте нового пользователя:
    Создайте нового пользователя в системе (например, "SirSpamALot"). После этого можно переприсвоить все спам-посты созданному пользователю с помощью следующего SQL-запроса:

    UPDATE wp_posts SET post_author=НОВЫЙ_ID_ПОЛЬЗОВАТЕЛЯ WHERE post_author=НЕВАЛИДНЫЙ_ID_ПОЛЬЗОВАТЕЛЯ;
  5. Удалите спам-пост:
    После изменения автора вы сможете видеть и управлять спам-постами через админку WordPress. Удалите их, если это необходимо, и переместите в корзину.

  6. Очистите корзину:
    Используйте плагин Advanced DB Cleaner для удаления невидимых постов из корзины. Это поможет избежать путаницы в будущем.

  7. Примените дополнительные меры безопасности:
    Рассмотрите возможность установки плагинов безопасности для предотвращения появления спам-постов в будущем. Также убедитесь, что ваши плагины и темы обновлены до последних версий, чтобы избежать потенциальных уязвимостей.

Эти шаги должны помочь вам найти и удалить невидимый спам-пост из вашего сайта WordPress. Если у вас есть дополнительные вопросы или возникнут сложности на каком-либо этапе, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...