Bagaimana cara memuat Widget javascript + file css hanya jika digunakan?

13

Saya ingin menyimpan gaya javascript dan css yang digunakan oleh widget saya di dalam file mereka sendiri (dan tidak menambahkannya ke tema).

Tapi sepertinya saya tidak bisa mendapatkan wordpress untuk menambahkannya ketika widget sebenarnya digunakan di sidebar.

Saya sudah mencoba ini:

di dalam deklarasi Kelas, saya telah menambahkan 2 fungsi

class EssentielleRubriquesPosts extends WP_Widget {

function addFrontendCss(){
    wp_enqueue_style('erw-frontend-css', ESSENTIELLE_RUBRIQUE_WIDGET_PLUGIN_PATH . 'css/EssentielleRubriqueWidget-frontend.css');
}
function addFrontendJavascript(){
    wp_register_script('jq-hoverintent', PLUGIN_PATH . 'js/jquery.hoverintent.js', array('jquery'), '1.0',true);
    wp_enqueue_script('jq-hoverintent');
    wp_enqueue_script('jq-tools', PLUGIN_PATH . 'js/jquery.tools.js', array('jquery'),'1.0',true);
    wp_enqueue_script('erw-frontend-js', PLUGIN_PATH . 'js/widget-frontend.js', array('jquery', 'jq-hoverintent', 'jq-tools'),'1.0',true);

}

dan di dalam fungsi widget ():

function widget($args, $instance) {
        add_action( 'wp_print_scripts', 'addFrontendJavascript' );
        add_action( 'wp_print_styles', 'addFrontendCss' );
}

Tapi itu tidak melakukan apa-apa ...

Pixeline
sumber
bagaimana dengan ini docs developers.elementor.com/add-custom-functionality
Juan Solano

Jawaban:

5

Solusi terbaik adalah mendaftarkan aset Anda terlebih dahulu dan kemudian enqueue CSS dan JS di dalam widget()fungsi WP_Widget Anda (langsung enqueue, bukan dengan menambahkan kait baru).

Saya telah menguji solusi ini dan itu berfungsi dalam versi WordPress saat ini (4.5.3) - JS dan CSS ditambahkan di footer halaman.

<?php
// Register your assets during `wp_enqueue_scripts` hook.
function custom_register_scripts() {
    wp_register_style('erw-frontend-css', '...frontend.css');
    wp_register_script('jq-hoverintent', '...hoverintent.js', ...);
    wp_register_script('jq-tools', '...tools.js', ...);
}
// Use wp_enqueue_scripts hook
add_action('wp_enqueue_scripts', 'custom_register_scripts');


class YourWidget extends WP_Widget {
    public function __construct() {
    }

    public function widget( $args, $instance ) {
        // Enqueue needed assets inside the `widget` function.
        wp_enqueue_style('erw-frontend-css');
        wp_enqueue_script('jq-hoverintent');
        wp_enqueue_script('jq-tools');

        // Output widget contents.
    }

    public function form( $instance ) {
    }

    public function update( $new_instance, $old_instance ) {
    }
}
Philipp
sumber