J'ai un plugin pour injecter des en-têtes HTTP supplémentaires. Cela fonctionne bien avec le code suivant:
add_action( 'send_headers', 'jim_stop' );
function jim_stop() {
header( 'Cache-Control: no-store, no-cache, must-revalidate, max-age=0' );
header( 'Pragma: no-cache' );
header( 'Expires: Thu, 01 Dec 1994 16:00:00 GMT' );
}
Il définit les en-têtes HTTP ci-dessus sur tous les messages. Cependant, je souhaite injecter les en-têtes uniquement dans les pages d'une catégorie spécifique. Par exemple, supposons que la catégorie slug est x
et que id est 75
.
Pour définir les en-têtes HTTP spécifiques aux publications de la catégorie x
, j'ai utilisé in_category( 'x' )
en conditionnel comme suit:
add_action( 'send_headers', 'jim_stop' );
function jim_stop() {
if ( in_category( 'x' ) ) {
// category specific HTTP headers
}
}
mais ça n'a pas marché.
J'ai aussi essayé de vérifier la catégorie comme ceci:
$cat = get_query_var( 'cat' );
if ( $cat == '75' ) {
// category specific HTTP headers
}
et aussi comme ça:
global $post;
if ( in_category ( 'x', $post->ID ) ) {
// category specific HTTP headers
}
mais ceux-ci échouent aussi.
Comme la vérification de catégorie ne fonctionnait pas avec le hook d'action send_headers
, j'ai essayé de le faire avec le hook de filtre wp_headers
, comme suit:
add_filter( 'wp_headers', 'add_header_xua' );
function add_header_xua( $headers ) {
if ( in_category( 'x' ) ) {
// category specific HTTP header changes
}
return $headers;
}
mais cela échoue aussi. Donc ma question est:
Le hook send_headers
est lancé une fois que les en-têtes HTTP
pour la mise en cache, le contenu, etc. ont été envoyés, mais avant que la requête principale ne soit correctement lancée. C'est pourquoi la fonction in_category()
ne fonctionne pas lorsque vous l'utilisez dans ce crochet d'action. Il en va de même pour le crochet de filtre wp_headers
.
Vous pouvez utiliser le hook template_redirect
action (ou même le hook action wp
). Ce raccordement est activé une fois que les objets liés à la requête de la base de données principale ont été lancés correctement, mais avant que toute sortie soit générée. Ce hook est donc utile pour définir des en-têtes HTTP supplémentaires, rediriger vers une autre URL, etc.
Vous devez également cocher is_single()
car vous souhaitez l'appliquer uniquement aux publications de cette catégorie. Sinon, cela s'appliquera également à la page d'archivage des catégories.
Ainsi, le code de travail sera comme suit:
add_action( 'template_redirect', 'jim_stop' );
function jim_stop() {
if( is_single() && in_category( 'x' ) ) {
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: Thu, 01 Dec 1990 16:00:00 GMT');
}
}
Maintenant, la vérification de la catégorie fonctionnera et ces en-têtes HTTP supplémentaires ne s'appliqueront qu'aux publications de la catégorie x
.