J'ai beaucoup de difficulté à utiliser le filtre http_request_Host_is_external
. Pour des raisons d’arrière-plan, j’essaie de configurer un serveur distinct pour gérer les mises à jour de plug-in et de thèmes privés. Le problème est que c'est sur un serveur séparé, donc la fonction Wordpress wp_http_validate_url
(wp-includes/http.php) tue la requête. Ce qui suit sont les lignes 481 à 503 de ce fichier.
if ( $ip ) {
$parts = array_map( 'intval', explode( '.', $ip ) );
if ( '127.0.0.1' === $ip
|| ( 10 === $parts[0] )
|| ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
|| ( 192 === $parts[0] && 168 === $parts[1] )
) {
// If Host appears local, reject unless specifically allowed.
/**
* Check if HTTP request is external or not.
*
* Allows to change and allow external requests for the HTTP request.
*
* @since 3.6.0
*
* @param bool false Whether HTTP request is external or not.
* @param string $Host IP of the requested Host.
* @param string $url URL of the requested Host.
*/
if ( ! apply_filters( 'http_request_Host_is_external', false, $Host, $url ) )
return false;
}
}
Vous remarquerez qu'il y a un commentaire dans celui-ci qui indique que nous devrions pouvoir appliquer le filtre et faire des demandes externes, mais ce que j'essaie ne semble pas fonctionner.
require 'plugin_update_checker.php';
apply_filters( 'http_request_Host_is_external', true, "my-update-server.com", 'http://my-update-server.com/update/8b6b28f1a2604deea192076cb2343ff4/' );
$MyUpdateChecker = new PluginUpdateChecker_1_3(
'http://my-update-server/update/8b6b28f1a2604deea192076cb2343ff4/',
__FILE__,
'testslug'
);
Je pensais que si je définissais le filtre dans le fichier principal de mon plugin, il s'en occuperait, mais je pense que le problème, c'est que la requête externe se produit directement dans le programme de mise à jour de Wordpress, alors peut-être que mon filtre ne s'applique pas?
Tu peux le faire:
add_filter( 'http_request_Host_is_external', '__return_true' );
Toutefois, notez que cela désactive cette fonctionnalité de sécurité. Si vous savez que l'hôte ou l'URL ne changera pas et le sera toujours, vous pouvez être plus en sécurité en vérifiant explicitement que:
add_filter( 'http_request_Host_is_external', 'allow_my_custom_Host', 10, 3 );
function allow_my_custom_Host( $allow, $Host, $url ) {
if ( $Host == 'my-update-server' )
$allow = true;
return $allow;
}
Je suis apparemment un peu rouillé. Cela s'en est occupé pour moi:
add_filter( 'http_request_Host_is_external', function() { return true; });