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
$page
La variable globale n’est pas un WP_Post
objet. C’est juste l’identifiant du poste. Donc, pour obtenir le titre de la page, vous devez d’ WP_Post
abord obtenir l’objet à partir de l’ID de publication.
La raison pour laquelle le report est toujours ajouté est double. Tout d’abord, $page
est un entier, donc $page->page_name
sera évalué comme null
et null
n’est pas identiquement égal à ‘awkward_page’. Il lancera également une erreur ou un avertissement. De plus, page_name
n’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