我目前正在为我的网站开发wordpress小部件。此小部件将在我的网站中提取用户的最新帖子,并显示在他们的博客中。
在小部件中,用户可以选择对小部件使用他们的css或我的css
我在我的小部件中使用了这段代码,它的工作非常完美,但这段代码将始终加载css。
add_action( \'widgets_init\', \'load_my_widgets\' );
function load_my_widgets() {
register_widget( \'My_Widget\' );
wp_register_style( \'my_widget_css\', \'http://mydomain.com/css/my-widget.css\' );
wp_enqueue_style( \'my_widget_css\' );
}
问题是如何根据用户选项启用CSS?我试过这样的东西,但不管用
function widget( $args, $instance ) {
$own_css = isset( $instance[\'own_css\'] ) ? true : false;
if ( ! $own_css ) {
wp_enqueue_style( \'my_widget_css\' );
}
}
最合适的回答,由SO网友:chrisguitarguy 整理而成
这有点草率,因为不管怎样,样式仍将被排队。
在显示小部件的代码中,根据用户是否选择了自己的样式更改CSS选择器:
<?php
$prefix = $instance[\'own_style\'] ? \'ownstyle_\' : \'pluginstyle_\';
//then....
?>
<div id="<?php echo $prefix; ?>selector"> ...</div> etc
用户可以通过这种方式使用自定义样式的小部件和默认样式的小部件。将您的样式分别排列在其自己的函数中。
add_action( \'wp_print_scripts\', \'wpse26241_enqueue\' );
function wpse26241_enqueue()
{
if( is_admin() ) return;
if( is_active_widget( \'My_Widget\' ) )
wp_enqueue_style( \'my_style\' );
}
SO网友:Chip Bennett
您需要将该选项从小部件中拉出,并使其成为插件选项。
例如,如果register_setting()
选项数组名称为plugin_myplugin_options
(其中“myplugin”是您的插件slug),您可以添加一个布尔选项,use_plugin_css
, 如果true
将使用插件的CSS,如果false
将使用用户的CSS。
因此,请更改widgets_init
回调如下内容:
function load_my_widgets() {
register_widget( \'My_Widget\' );
$myplugin_options = get_option( \'plugin_myplugin_options\' );
if ( $myplugin_options[\'use_plugin_css\'] ) {
wp_register_style( \'my_widget_css\', \'http://mydomain.com/css/my-widget.css\' );
wp_enqueue_style( \'my_widget_css\' );
}
}
另外,如果这是一个公开发布的插件,您需要
namespace 所有函数调用。e、 g.变更
function load_my_widgets() {}
到
function myplugin_load_widgets() {}
, 其中“myplugin”是您的插件slug。注册自定义样式或脚本也是如此;改变
my_widget_css
到
myplugin_css
, 其中“myplugin”是您的插件slug。