8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un site qui tourne en wordpress et pour lequel j'ai créé un thème.
J'ai un soucis que je n'arrive pas à comprendre. J'ai fait tout la phase de développement sur un serveur local (MAMP), mon site y fonctionne très bien, par contre lorsque je charge mon thème sur le serveur de mon hébergeur (OVH) je constate que certaines fonctions ne marchent plus.
Afin d'éviter des conflits entre certains scripts je suis obligé de les charger sélectivement et ce en fonction de la page où ils doivent agir, pour cela j'ai inséré ce code dans la page functions.php de mon thème
	if (is_front_page()){
		wp_enqueue_script('flexslider-scripts');
		wp_enqueue_script('caroussel');
		wp_enqueue_script('menu');
			} elseif (is_page_template('page-portfolio.php')){
				wp_enqueue_script('menu');
				wp_enqueue_script('lightbox');
				} elseif (is_single()){
				wp_enqueue_script('menu');
				wp_enqueue_script('lightbox');
				}
				 else {
		wp_enqueue_script('menu');
		wp_enqueue_script('dropdown');
	}


Le problème que je rencontre est le suivant: sur le serveur distant la condition
elseif (is_single())
n'est pas prise en compte et les scripts (menus et lightbox) ne se chargent pas, il faut que je mette à la place
 elseif (is_singular('single-projects.php'))

Dans ce cas ça fonctionne chez l'hébergeur mais plus sur le serveur local...
A quoi cela est-il dû et surtout comment résoudre ce problème.
Je vous remercie par avance pour votre réponse
Cordialement
Alain
(NB: single-projects.php est un template de page que j'ai créé pour certains parties de mon site)
Bonjour,

is_single() ne fonctionnera que pour les post types de type 'post' donc les actualités qui existent nativement dans wordpress.

is_singular() fonctionne pour n'importe quel post type mais prend en argument un post type donc ce que tu as mis est incorrect ; 'single-projects.php'.

Logiquement ceci devrait fonctionner si tu cherches à mettre ton menu/lightbox sur toutes tes singles

if (is_front_page()){ // Front page
     wp_enqueue_script('flexslider-scripts');
     wp_enqueue_script('caroussel');
     wp_enqueue_script('menu');
}
elseif (is_singular()){ // Any single
     wp_enqueue_script('menu');
     wp_enqueue_script('lightbox');
} 
else { // Default
     wp_enqueue_script('menu');
     wp_enqueue_script('dropdown');
}


Enfin tu devrais plutôt essayer de résoudre ton problème de conflit.
Bonjour,

Pour ce qui est de is_single ne se chargeant que pour des posts types de style 'post', c'est exactement ce que je veux. Puisque ma page single-projects.php est une page dédiée 'posts'.
Je viens de faire l'essai de ton code, et ça ne fonctionne pas du tout, car maintenant les scripts se chargent sur toutes les pages sans aucune distinctions.
Et je ne comprends pas pourquoi avoir supprimé is_page_template dans ton code?
Merci beaucoup d'avance pour tes éclairsissements?

PS: et une petite précision, désolé j'ai employé un mauvais terme quand je parlais de conflits de scripts. Je voulais dire des comportements non désirés. En clair, je ne veux pas de l'effet lightbox pour certaines de mes pages, d'où le chargement sélectif des scripts...
Modifié par Wanderer68 (26 Jul 2019 - 17:46)
Comme précisé le code plus haut fonctionnera si tu cherches à mettre ton menu/lightbox sur toutes tes singles.

Si ton template s'appelle single-projects.php c'est que ton post type s'appelle projects auquel cas tu peux tester en faisant :

is_singular('projects')


Si ça marche dans un cas avec 'projects' et dans l'autre avec 'post' c'est que tu n'utilises pas le même post type et donc il faut corriger cela. Mais cela entrainerait logiquement tout un tas d'autres problèmes car la boucle que tu as dû mettre dans page-portfolio.php ne fonctionnerait plus ou ton template single-projects.php ne serait plus utilisé.

Si tu ne veux pas appliquer des scripts sur certaines pages tu peux utiliser les classes que tu as sur la balise body qui sont spécifiques à chaque template pour filtrer ou ajouter des classes spécifiques aux endroits où tu souhaites déclencher tes scripts.
Merci beaucoup pour ton retour et tes explications.
Je viens de tester avec ta solution, et maintenant ça fonctionne comme sur des roulettes.
Un grand merci une fois encore pour ton temps
Une excellente soirée à toi
Cordialement
Alain