Aș dori să integrez Facybox 3 în WordPress (numai la postări). Funcționează, dar „m-am deranjat puțin, deoarece scriptul de inițializare este încărcat după nucleul minificat fancybox js
. Deci, aici este codul pe care l-am adăugat în copilul meu functions.php
:
// ENQUEUE FANCYBOX SCRIPT function fancy_scripts() { if ( is_single() ) { wp_enqueue_script( "fancybox-script", "https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js", array(), "3.3.5", true ); } } add_action( "wp_enqueue_scripts", "fancy_scripts" ); // INITIALIZE function fancy_init(){ if ( is_single() ) { ?> <script> jQuery(document).ready(function($){ $("[data-fancybox]").fancybox({ buttons: [ "zoom", "fullScreen", "share", "thumbs", "close" ], protect: true }); $(document).on("click", ".fancybox-share a.fancybox-share__button", function(e){ e.preventDefault(); var url = $(this).attr("href"); window.open(url, "_blank"); }); }); </script> <?php } } add_action("wp_footer","fancy_init") ; // ENQUEUE CSS TO FOOTER function fancy_footer_styles() { if ( is_single() ) { wp_enqueue_style( "fancybox-style","https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.css" ); } }; add_action( "get_footer", "fancy_footer_styles" );
Și iată rezultatul html
<!--FOOTER--> <script> jQuery(document).ready(function($){ $("[data-fancybox]").fancybox({ buttons: [ "zoom", "fullScreen", "share", "thumbs", "close" ], protect: true }); $(document).on("click", ".fancybox-share a.fancybox-share__button", function(e){ e.preventDefault(); var url = $(this).attr("href"); window.open(url, "_blank"); }); }); </script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.css?ver=81a38b5eb2a4df901367646a93448a94" type="text/css" media="all" /> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js?ver=3.3.5"></script>
My întrebările sunt:
- Este o problemă care inițializează încărcările înainte de fanta de bază js?
- Este o modalitate adecvată de a face asta sau trebuie să pun inițializarea script într-un fișier js separat și apoi îl stoarceți în aceeași funcție în care am încărcat fișierul de bază? Astfel, vreau să spun:
.
function fancy_scripts() { if ( is_single() ) { wp_enqueue_script( "fancybox-script", "https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js", array(), "3.3.5", true ); wp_enqueue_script( "custom-script", get_stylesheet_directory_uri() . "/js/custom-scripts.js", array( "jquery" ), true ); } } add_action( "wp_enqueue_scripts", "fancy_scripts" );
Răspuns
Nu ar trebui să existe probleme reale în acest sens, dar există un mod mai corect, și anume utilizarea wp_add_inline_script
, care este destinat exact situațiilor în care doriți să adăugați ceva la un fișier script. L-ați folosi ca aceasta:
add_action ("wp_enqueue_scripts", "wpse302588_enqueue_add_script"); function wpse302588_enqueue_add_script() { $add_script = "jQuery(document).ready(function($){ .... });"; // your script as a string without <script> tags wp_enqueue_script ("fancybox-script", "https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js", array(), "3.3.5", true); wp_add_inline_script ("fancybox-script", $add_script, "after"); }
Răspuns
Mulțumită lui cjbj, iată codul de lucru pentru a adăuga Fancybox la WordPress:
// ADD FANCYBOX SCRIPT add_action ("wp_enqueue_scripts", "add_fancybox_script"); function add_fancybox_script() { if ( is_single() ) { // LOAD ONLY FOR SINGLE POSTS $add_script = "jQuery(document).ready(function($){ $("[data-fancybox]").fancybox({ buttons: [ "zoom", "fullScreen", "share", "thumbs", "close" ], protect: true }); });"; wp_enqueue_script ("fancybox-script", "https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js", array(), "3.3.5", true); wp_add_inline_script ("fancybox-script", $add_script, "after"); } } // ENQUEUE CSS TO FOOTER function fancy_footer_styles() { if ( is_single() ) { wp_enqueue_style( "fancybox-style","https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.css" ); } }; add_action( "get_footer", "fancy_footer_styles" );
Am „încărcat CSS-ul în subsol, deoarece nu este important atunci când pagina se încarcă.
De asemenea, fiți atenți la amestecarea ghilimelelor simple („) și ghilimelelor duble („)!