skip to Main Content
+30-6944453971 info [a] selidamou.gr

Υπάρχει conflict με κάποιο javascript (js) αρχείο

Συχνά πυκνά, όταν κάνουμε μια εγκατάσταση ένα νέο Plugin ή έστω αναπτύσσουμε  εμείς κάποιο Plugin ή γράφουμε κάποιο sctipt (you get the idea), δημιουργείται κάποιο conflict με κάποιο αρχείο. Συνήθως αυτό το αρχείο είναι κάποιο js file.

Πρόσφατα είχε ένα παρόμοιο περιστατικό με ένα plugin που ανέπτυξα και χρησιμοποιούσε το date field picker. Έκανε conflict με ένα αγορασμένο Plugin, και δεν λειτουργούσε όπως έπρεπε. Πρώτα φυσικά πρέπει να σκεφτείτε και να ψάξετε προσεκτικά από ποιο Plugin, προέρχεται το conflict. Σε δεύτερη φάση να βρείτε ποιο αρχείο χρησιμοποιεί το συγκεκριμένο js file και σε ποιο σημείο γίνεται enqueue. Το πρόβλημα μου ήταν μεταξύ του woocomerce category discount pro & custom ACF Pro που περιείχε το πεδίο datetime picker.

 

Στην δική μου περίπτωση το conflict συνέβαινε στο backend του wordpress. Ο κώδικας στο plugin που μου έκανε conflict αρχικά ήταν:

 wp_register_script( 'date-picker-js', plugin_dir_url( __FILE__ ) . 'assets/js/jquery.datetimepicker.min.js', array('jquery'), false, '1.0.0' );
 wp_enqueue_script( 'date-picker-js' );

 

Το παραπάνω enqueue βρισκόταν μέσα σε ένα function load_custom_wp_admin_style. Το αφαίρεσα από το συγκεκριμένο function και το έβαλα σε ένα δικό του, ώστε να φορτώνει μόνο στη σελίδα του backend όταν χρειάζεται. Με αυτό το τρόπο, το datetime field picker δούλευε όταν το Plugin μου χρειαζόταν γιατί δεν το είχε φορτώσει, και όταν πήγαινε ο διαχειριστής στην σελίδα του προβληματικού Plugin, φόρτωνε κανονικά τo js file, ώστε να δουλεύει και αυτό κανονικά (makes any sense?).

Το Hook το βρίσκουμε εύκολα αν δούμε το source από το admin page μέσα στο Plugin..

<script type="text/javascript">
addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
var ajaxurl = '/wp-admin/admin-ajax.php',
pagenow = 'woocommerce_page_wpcd-category-discount-pro',
typenow = '',
adminpage = 'woocommerce_page_wpcd-category-discount-pro',
thousandsSeparator = '.',
decimalPoint = ',',
isRtl = 0;
</script>

Το function που πρόσθεσα μαζί με το action για να το φορτώσω.

function v_load_custom_wp_admin_style($hook) {
// Load only on ?page=zen-leads-menu
if($hook != 'woocommerce_page_wpcd-category-discount-pro') {
return;
}
wp_register_script( 'date-picker-js', plugin_dir_url( __FILE__ ) . 'assets/js/jquery.datetimepicker.min.js', array('jquery'), false, '1.0.0' );
wp_enqueue_script( 'date-picker-js' );

}
add_action( 'admin_enqueue_scripts', 'v_load_custom_wp_admin_style' );



Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top
×Close search
Search