Il y avait une question plus ancienne à laquelle je répondais: quelqu'un voulait supprimer les protocoles HTTP et HTTPS des URL de son site Web :
add_action( 'plugins_loaded', 'output_buffering' );
function output_buffering() {
ob_start( 'remove_protocols' ) );
}
function remove_protocols( $buffer ) {
$content_type = NULL;
foreach ( headers_list() as $header ) {
if (strpos( strtolower( $header ), 'content-type:' ) === 0 ) {
$pieces = explode( ':', strtolower( $header ) );
$content_type = trim( $pieces[1] );
break;
}
}
if ( is_null( $content_type ) || substr( $content_type, 0, 9 ) === 'text/html' ) {
$return = preg_replace( '~=\s*["\']\s*https?:(.*?)["\']~i', '="$1"', $buffer );
if ( $return ) {
$buffer = $return;
}
}
return $buffer;
}
En conséquence, cela donne:
<link rel='stylesheet' id='some-id' href='//example.com/some/style.css' type='text/css' media='all' />
<script type='text/javascript' src='//example.com/some/script.js'></script>
<a href="//example.com" title="Some Title" rel="home">Some Link</a>
<img src="//example.com/some/image.jpg" alt="Some Alt" width="150" height="50" />
Cependant, j'ai simplifié la fonction remove_protocols()
qui me donne les mêmes résultats:
function remove_protocols( $buffer ) {
$buffer = preg_replace( '~=\s*["\']\s*https?:(.*?)["\']~i', '="$1"', $buffer );
return $buffer;
}
Dans ma fonction d'origine, est-il nécessaire de vérifier content-type
dans les en-têtes? En faisant des recherches, j'ai trouvé une question similaire sur Stack Overflow qui dépend de la situation. En lisant cela, je suppose qu’il serait sans danger d’utiliser ma version simplifiée à la place, mais je voudrais obtenir une confirmation si je comprends bien.
Oui, dans le contexte de cette question. Sans inspecter l'en-tête de type de contenu, vous ne savez pas s'il s'agit d'une page html ou d'une image. Même s'il est peu probable que l'expression régulière corresponde à quoi que ce soit dans une image, le risque existe.
une autre façon d’écrire ce code est de l’accrocher à template_redirect
ou même à get_header
pour être aussi sûr à 100% que vous avez affaire à des pages html et non à des flux RSS, json, xml, etc., pour lesquels cette transformation d’URL pourrait ne pas être requise ou même Bienvenue.
en repensant à la question initiale, il est évident que vous en voudrez également dans les pages d'administration ... alors peut-être que votre solution originale est la plus complète qui puisse être.
OTOH, et pas très lié à cette question, vous pourriez finir par remplacer trop, comme l'URL canonique qui pourrait créer un problème de contenu en double.