J'avais besoin d'un moyen de filtrer le contenu d'une page / messages avant qu'il ne soit chargé afin que je puisse ajouter des scripts à l'en-tête si un shortcode spécifique était présent. Après de nombreuses recherches, je suis tombé sur ceci sur http://wpengineer.com
function has_my_shortcode($posts) {
if ( empty($posts) )
return $posts;
$found = false;
foreach ($posts as $post) {
if ( stripos($post->post_content, '[my_shortcode') )
$found = true;
break;
}
if ($found){
$urljs = get_bloginfo( 'template_directory' ).IMP_JS;
wp_register_script('my_script', $urljs.'myscript.js' );
wp_print_scripts('my_script');
}
return $posts;
}
add_action('the_posts', 'has_my_shortcode');
ce qui est absolument génial et a fait exactement ce dont j'avais besoin.
Maintenant, je dois l'étendre un peu plus et faire de même pour les barres latérales. Il peut s'agir d'un type de widget particulier, d'un shortcode, d'un extrait de code ou de tout autre élément qui pourrait identifier le moment où le script doit être chargé.
Le problème est que je ne peux pas comprendre comment accéder au contenu des barres latérales avant que la barre latérale ne soit chargée (le thème en question aura plusieurs barres latérales)
la source
Réponses:
Vous pouvez utiliser la fonction is_active_widget . Par exemple:
Pour charger le script dans la page où le widget est chargé uniquement, vous devrez ajouter le code is_active_widget (), dans votre classe de widget. Par exemple, consultez le widget de commentaires récents par défaut (wp-includes / default-widgets.php, ligne 602):
la source
Je voulais juste partager une solution sur laquelle j'ai travaillé qui m'a permis d'être un peu plus polyvalent avec mon implémentation. Plutôt que de faire vérifier la fonction pour une variété de shortcodes, je l'ai modifiée pour rechercher un shortcode unique qui référence une fonction de script / style qui doit être mise en file d'attente. Cela fonctionnera pour les deux méthodes dans d'autres classes (comme les plugins qui ne peuvent pas le faire eux-mêmes) et les fonctions dans la portée. Déposez simplement le code ci-dessous dans functions.php et ajoutez la syntaxe suivante à n'importe quelle page / publication où vous souhaitez CSS et JS spécifiques.
Page / Post Syntaxe: [loadCSSandJS function = "(classe-> méthode / nom de fonction)"]
code functions.php:
Cela vous permettra également d'ajouter autant que vous le souhaitez sur une page. Gardez à l'esprit que vous avez besoin d'une méthode / fonction pour charger.
la source
Merci d'avoir partagé cette astuce! Cela m'a donné un petit mal de tête, car au début ça ne fonctionnait pas. Je pense qu'il y a quelques erreurs (peut-être des fautes de frappe) dans le code ci
has_my_shortcode
- dessus et j'ai réécrit la fonction comme ci-dessous:Je pense qu'il y avait deux problèmes principaux: le
break
n'était pas dans la portée de l'instruction if, et cela faisait que la boucle se cassait toujours à la première itération. L'autre problème était plus subtil et difficile à découvrir. Le code ci-dessus ne fonctionne pas si le shortcode est la toute première chose écrite dans un article. J'ai dû utiliser l'===
opérateur pour résoudre ce problème.Quoi qu'il en soit, merci beaucoup d'avoir partagé cette technique, cela a beaucoup aidé.
la source
avec Wordpress 4.7, il existe un autre moyen d'y parvenir dans votre
functions.php
fichier,vous enregistrez d'abord votre script , qui n'est pas réellement imprimé sur votre page, sauf si vous le mettez en file d'attente si votre shortcode est appelé,
le a
do_shortcode_tag
été introduit dans WP 4.7 et peut être trouvé dans les nouvelles pages de documentation des développeurs .la source