仅当特定小部件处于活动状态时,我如何才能将样式入队?

时间:2016-10-02 作者:SelketDaly

我有一个插件,它需要小部件的样式表。我试图在创建小部件时注册样式表,但是样式表没有排队,样式被忽略。我使用的代码如下所示,注释行展示了我尝试过的其他一些选项:

组织者。php

class Organiser extends WP_Widget {
    ...

    public function widget( $args, $instance ) {
        add_action( \'wp_enqueue_scripts\', array(\'Organiser\', \'register_plugin_styles\') );
        include(dirname(__FILE__)."/organiserWidget.php");
    }

    function register_plugin_styles() {
        wp_register_style( \'organiserStyle\', plugins_url( \'organiser/css/organiserStyle.css\' ) );
        wp_enqueue_style( \'organiserStyle\' );

       // wp_register_style( \'organiserStyle\', plugin_dir_url( __FILE__ ) . \'css/organiserStyle.css\' );
       // wp_enqueue_style( \'organiserStyle\', plugin_dir_url( __FILE__ ) . \'css/organiserStyle.css\');
    }

    ....
}
organiserWidget。php

<div id="organiser">
</div>
css/组织者风格。css

@import "mobile-layout.css";
css/移动布局。css

@media screen and (max-width: 420px) {
    div#organiser {
        width: 100%;
        height: 240px;
    }
}
据我所知,这是按照文档的建议进行的,到目前为止,我还没有找到任何迹象表明我做错了什么。

2 个回复
SO网友:Tomasz Bakula

您需要稍微修改一下。

class Organiser extends WP_Widget {
    ...

    function __construct() {
        add_action( \'wp_enqueue_scripts\', array(\'Organiser\', \'register_plugin_styles\') );
        ...
    }

    public function widget( $args, $instance ) {
        wp_enqueue_style( \'organiserStyle\' );
        include(dirname(__FILE__)."/organiserWidget.php");
    }

    static function register_plugin_styles() {
        wp_register_style( \'organiserStyle\', plugins_url( \'organiser/css/organiserStyle.css\' ) );

        // wp_register_style( \'organiserStyle\', plugin_dir_url( __FILE__ ) . \'css/organiserStyle.css\' );
        // wp_enqueue_style( \'organiserStyle\', plugin_dir_url( __FILE__ ) . \'css/organiserStyle.css\');
    }

    ...
}

SO网友:Andy Macaulay-Brook

我还没有机会对此进行测试,但我认为您在尝试附加register_plugin_styles 作用

而不是使用类名Organiser 您需要对对象实例的引用。请尝试以下操作:

add_action( \'wp_enqueue_scripts\', array( $this, \'register_plugin_styles\') );
此外,通过在小部件中调用此函数,您只在WP输出排队的样式表后才将样式排队。

WP为我们提供了一个功能is_active_widget 检查此处是否有用。将您的排队从小部件中取出,并将其附加到另一个挂钩上,如init. 在挂钩函数中使用如下条件:

if ( is_active_widget( \'your_widget_function_name\' ) ) {
    add_action( \'wp_enqueue_scripts\', \'register_plugin_styles\' );
}
现在,由于我看不到你的课程的全部细节,我不能建议你如何在那里成功地使用它,也不能建议用什么来代替your_widget_function_name.