Pingback и trackback давно не дают той пользы, ради которой их когда-то включали по умолчанию. На живом сайте они чаще создают лишние HTTP-запросы, спам-уведомления и путаницу в комментариях. Если у вас растёт число странных входящих уведомлений, в логах видны обращения к xmlrpc.php или вы просто хотите убрать старый механизм из WordPress, отключать нужно не только приём, но и отправку.
Ниже — рабочий сценарий: сначала быстро диагностируем, где именно pingback/trackback ещё активны, потом отключаем их в настройках и кодом, а в конце проверяем результат без догадок.
Когда pingback и trackback реально мешают
Проблема обычно всплывает в одном из трёх случаев. Первый — сайт получает спамные уведомления о «ссылках» с чужих доменов, хотя это не ссылки, а мусорные запросы. Второй — после публикации статьи WordPress пытается уведомить внешние адреса, а это лишняя нагрузка и иногда задержки при сохранении записи. Третий — в безопасности: старые механизмы часто используют вместе с xmlrpc.php, который на многих сайтах давно не нужен.
Если у вас уже отключён комментарийный функционал на части страниц, но уведомления всё равно приходят, значит, выключение было неполным. В WordPress есть отдельная настройка для приёма пингбеков на уровне записи и отдельная логика для отправки уведомлений при публикации.
Что стоит проверить до изменений
- Есть ли у вас интеграции, которые завязаны на
xmlrpc.phpили старые уведомления о ссылках. - Используются ли комментарии и обратные ссылки вообще, или это наследие старой темы.
- Нет ли плагина, который повторно включает pingback для отдельных типов записей.
- Не закрыт ли уже
xmlrpc.phpна уровне сервера, чтобы не искать проблему не там.
Как отключить pingback и trackback в админке
Самый безопасный путь — сначала снять галочки в настройках обсуждения. Это не требует кода и подходит, если вы хотите быстро убрать приём обратных ссылок на новых записях.
- Откройте Настройки → Обсуждение.
- Снимите опцию, связанную с уведомлением блогов о появлении ссылок на ваших записях.
- Проверьте, не включены ли комментарии и обратные ссылки в уже опубликованных материалах.
Но этого недостаточно, если на сайте есть старые записи с включёнными параметрами. Для них нужно массово отключить ping_status и trackback_status на уровне базы или через код.
Отключение pingback и trackback кодом
Если вы ведёте сайт как разработчик, лучше зафиксировать поведение в теме или небольшом must-use плагине. Так настройка не слетит после обновления.
<?php
add_action( 'init', function () {
// Убираем поддержку trackback/pingback из стандартных типов записей.
remove_post_type_support( 'post', 'trackbacks' );
remove_post_type_support( 'page', 'trackbacks' );
} );
add_filter( 'pings_open', '__return_false', 20, 2 );
add_filter( 'xmlrpc_methods', function ( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
} );
Здесь важно понимать разницу. pings_open закрывает возможность отправки/приёма пингов на уровне логики WordPress. Удаление метода pingback.ping из XML-RPC дополнительно режет старый канал, через который часто прилетает лишний трафик.
Если вам нужно отключить pingback только для конкретных типов записей, не трогайте всё подряд. Например, для новостей можно оставить комментарии, а для страниц и записей — выключить обратные ссылки:
<?php
add_action( 'init', function () {
foreach ( [ 'post', 'page' ] as $post_type ) {
if ( post_type_supports( $post_type, 'trackbacks' ) ) {
remove_post_type_support( $post_type, 'trackbacks' );
}
}
} );
Как убрать уже включённые pingback у старых записей
Если сайт давно работает, у старых материалов в базе могут остаться открытые статусы. Тогда новые настройки не решают проблему полностью. В таком случае нужно массово обновить записи.
Самый аккуратный вариант — пройтись по опубликованным записям и закрыть ping_status и comment_status там, где это действительно нужно. Перед этим сделайте резервную копию базы.
<?php
$posts = get_posts( [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
] );
foreach ( $posts as $post_id ) {
wp_update_post( [
'ID' => $post_id,
'ping_status' => 'closed',
'comment_status' => 'closed',
] );
}
Не запускайте такой код без проверки на тестовой копии. На больших сайтах лучше обрабатывать записи пакетами, иначе можно получить лишнюю нагрузку и таймауты.
Сравнение подходов: админка, код, сервер
| Способ | Когда подходит | Ограничение |
|---|---|---|
| Настройки WordPress | Нужно быстро отключить приём pingback на новых записях | Не всегда затрагивает старые материалы |
| Код в теме или MU-плагине | Нужно зафиксировать поведение и не зависеть от темы | Требует аккуратного деплоя |
| Отключение XML-RPC на сервере | Нужно убрать старый канал целиком | Может сломать внешние сервисы, если они ещё используют XML-RPC |
Если у вас нет внешних интеграций, которые завязаны на XML-RPC, обычно достаточно кода на стороне WordPress. Полное отключение на сервере имеет смысл только после проверки зависимостей.
Как проверить, что решение сработало
Проверка нужна не «на глаз», а по конкретным признакам. Сначала откройте любую опубликованную запись в админке и убедитесь, что блок обсуждения больше не предлагает включить pingback/trackback. Затем проверьте исходный код страницы и наличие ссылок на xmlrpc.php — если вы отключали XML-RPC, его не должно быть в рабочем сценарии уведомлений.
Полезно также сделать тестовую публикацию и посмотреть, не появляются ли новые уведомления о входящих ссылках. Если сайт под нагрузкой, загляните в access log веб-сервера: запросы к xmlrpc.php должны исчезнуть или хотя бы перестать быть регулярными, если вы отключили этот канал полностью.
- В админке у записей нет включённого pingback.
- Новые публикации не создают лишних уведомлений.
- В логах нет повторяющихся запросов к
xmlrpc.php. - Старые записи при необходимости переведены в закрытый режим.
Частые ошибки и как их исправить
Отключили только в настройках, но уведомления остались
Это значит, что у старых записей сохранён открытый статус или плагин/тема повторно включает поддержку trackback. Проверьте типы записей и код, который выполняется на init.
Сломали внешнюю интеграцию
Если после отключения XML-RPC перестал работать мобильный клиент, сервис автопостинга или старый менеджер сайта, не держите отключение вслепую. Верните доступ и проверьте, какой именно сервис использует этот канал. Иногда достаточно ограничить доступ по IP, а не выключать всё целиком.
Запустили массовое обновление без бэкапа
Это типичная ошибка при работе с wp_update_post(). Если что-то пойдёт не так, откатить изменения без резервной копии будет сложно. Перед массовой правкой базы сделайте дамп и протестируйте скрипт на копии сайта.
Практические советы по безопасности и производительности
Если pingback и trackback вам не нужны, лучше убрать их не только из интерфейса, но и из поверхности атаки. Это уменьшает шум в логах и сокращает число бессмысленных запросов, которые обрабатывает WordPress. На сайтах с высокой посещаемостью это особенно заметно, если бот-активность уже и так создаёт нагрузку.
Для технической чистки сайта удобно держать такие изменения в отдельном MU-плагине, а не в functions.php активной темы. Тогда отключение не исчезнет после смены темы и не потеряется при обновлении дизайна. Если параллельно вы чистите дубли и технический мусор, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro, но только как дополнение к ручной проверке, а не как замену пониманию того, что именно отключается.
Главный принцип здесь простой: сначала выясняете, нужен ли вам старый механизм вообще, потом отключаете его в одном месте, затем проверяете логи и поведение сайта. Если хотя бы один из этих шагов пропустить, pingback обычно возвращается через старую запись, плагин или внешний сервис.