pingback возвращает код ошибки 0, сообщение отсутствует
Я реализовал свой собственный клиент обратной связи и отправил обратные связи на разные хосты.
Некоторые экземпляры wordpress ответили на запрос обратной связи XML-RPC с faultCode
из 0
и пустым faultMessage
.
Что может быть причиной этого?
2 answers
По какой-то причине фильтр по умолчанию, подключенный к ошибкам обратной связи, не будет отправлять сообщение об ошибке , если только код ошибки не равен 48. От wp-includes/commment.php
:
function xmlrpc_pingback_error( $ixr_error ) {
if ( $ixr_error->code === 48 )
return $ixr_error;
return new IXR_Error( 0, '' );
}
Стандартный источник Wordpress содержит только один вызов ошибки обратной связи с кодом ошибки 0 и пустым сообщением, в wp-includes/class-wp-xmlrpc-server.php
:
} elseif ( is_string($urltest['fragment']) ) {
// ...or a string #title, a little more complicated
$title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
$sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", like_escape( $title ) );
if (! ($post_ID = $wpdb->get_var($sql)) ) {
// returning unknown error '0' is better than die()ing
return $this->pingback_error( 0, '' );
}
$way = 'from the fragment (title)';
}
Таким образом, ошибка может произойти, когда сообщение не может быть определено по URL-адресу, и в конце URL-адреса есть фрагмент/якорь (#foo
). Этот фрагмент интерпретируется как заголовок, и в таблице сообщений выполняется поиск записи с точным этим заголовком.
К сожалению, в моем случае это не может быть причиной, так как у меня нет якорей в URL-адреса.