WordPress : Comment différer conditionnellement les scripts en fonction du nom de la page ?
J’ai le code suivant dans functions.php. La première fonction met correctement le script en file d’attente en fonction du nom de la page. Cependant, la deuxième fonction ajoute toujours l’attribut ‘defer’.
function custom_scripts() {
global $page;
if ($page->page_name !== 'awkward_page') {
wp_enqueue_script('jquery');
}
// ...
}
add_action( 'wp_enqueue_scripts', 'custom_scripts' );
function defer_scripts( $tag, $handle ) {
global $page;
if ($page->page_name !== 'awkward_page') {
return str_replace( ' src', ' defer src', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'defer_scripts', 10, 2 );
Quel est le problème avec ce code ?
Si ce n’est pas la bonne façon d’ajouter conditionnellement l’attribut html ‘defer’, quelle est la bonne façon ?
Solution n°1 trouvée
$pageLa variable globale n’est pas un WP_Postobjet. C’est juste l’identifiant du poste. Donc, pour obtenir le titre de la page, vous devez d’ WP_Postabord obtenir l’objet à partir de l’ID de publication.
La raison pour laquelle le report est toujours ajouté est double. Tout d’abord, $pageest un entier, donc $page->page_namesera évalué comme nullet nulln’est pas identiquement égal à ‘awkward_page’. Il lancera également une erreur ou un avertissement. De plus, page_namen’est pas une propriété valide d’un objet WP_Post. La propriété correcte est post_name– même sur les pages.
function defer_scripts( $tag, $handle ) {
//* Get the post object
$page = get_post( get_the_ID() );
//* Defer on some condition
if( 'awkward_page' !== $page->post_name ) {
$tag = str_replace( ' src', ' defer src', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'defer_scripts', 10, 2 );
0 commentaire