J'ai implémenté mon propre client pingback et envoyé des pingback à différents hôtes.
Certaines instances de wordpress ont répondu à la demande pingback XML-RPC avec une variable faultCode
de 0
et une variable faultMessage
.
Quelle peut en être la cause?
Pour une raison quelconque, le filtre par défaut associé aux erreurs pingback n'enverra pas de message d'erreur sauf si le code d'erreur est 48. From wp-includes/commment.php
:
function xmlrpc_pingback_error( $ixr_error ) {
if ( $ixr_error->code === 48 )
return $ixr_error;
return new IXR_Error( 0, '' );
}
La source Wordpress standard ne contient qu'un seul appel d'erreur de pingback avec un faultCode de 0 et un message vide, en 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)';
}
Ainsi, l'erreur peut se produire lorsque la publication ne peut pas être déterminée à partir de l'URL et qu'il existe un fragment/ancre (#foo
) à la fin de l'URL. Ce fragment est interprété comme titre et la table des articles est recherchée pour un article avec exactement ce titre.
Malheureusement, cela ne peut pas être la raison dans mon cas puisque je n'ai pas d'ancres dans les URL.