it-swarm.cn

如何在不使用内联样式的情况下将CSS选项添加到我的插件中?

我最近发布了一个插件, WP Coda Slider ,它使用短代码将jQuery滑块添加到任何帖子或页面。我在下一个版本中添加了一个选项页面,我想包含一些CSS选项,但我不希望插件将样式选项添加为内联CSS。我希望在调用时将选项动态添加到CSS文件中。

我还想避免使用fopen或写入文件以解决安全问题。

这样的事情很容易实现,或者只是直接在页面上添加样式选择会更好吗?

25
Chris_O

使用 wp_register_stylewp_enqueue_style 添加样式表。不要只是添加样式表链接到wp_head。排队样式允许其他插件或主题在必要时修改样式表。

您的样式表可以是.php文件:

wp_register_style('myStyleSheet', 'my-stylesheet.php');
wp_enqueue_style( 'myStyleSheet');

my-stylesheet.php 看起来像这样:

<?php
// We'll be outputting CSS
header('Content-type: text/css');

include('my-plugin-data.php');    
?>

body {
  background: <?php echo $my_background_variable; ?>;
  font-size: <?php echo $my_font_size; ?>;
}
27
Doug

动态构建CSS文件然后加载它会增加巨大的性能负担,这对于添加CSS文件应该是一个非常低带宽的处理,特别是如果CSS中有变量将通过WP处理。因为它是为一个页面加载创建的两个不同的文件,WP启动两次并运行所有数据库查询两次,这是一个很大的混乱。

如果您的滑块只在一个页面上,并且您希望动态设置样式,那么最好的办法是在标题中添加样式块。

按性能顺序:

  1. 在标题中添加小块样式,动态创建 - 非常快
  2. 通过wp_enqueue_style - Medium添加非动态样式表
  3. 通过wp_enqueue_style添加动态样式表 - 非常慢
10
Dan Gayle

这就是我通常这样做的方式:

function build_stylesheet_url() {
    echo '<link rel="stylesheet" href="' . $url . 'stylesheetname.css?build=' . date( "Ymd", strtotime( '-24 days' ) ) . '" type="text/css" media="screen" />';
}

function build_stylesheet_content() {
    if( isset( $_GET['build'] ) && addslashes( $_GET['build'] ) == date( "Ymd", strtotime( '-24 days' ) ) ) {
        header("Content-type: text/css");
        echo "/* Something */";
        define( 'DONOTCACHEPAGE', 1 ); // don't let wp-super-cache cache this page.
        die();
    }
}

add_action( 'init', 'build_stylesheet_content' );
add_action( 'wp_head', 'build_stylesheet_url' );
2
sorich87

我对这种类型的所有建议都有困难 - 也许我有点厚,或者贡献者可能已经失去了常识。

我决定在插件php文件中对此进行编码: -

echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/css.css' type='text/css' rel='stylesheet' />";
echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/public.css' rel='stylesheet' type='text/css'/>";

它似乎工作。它只加载那些使用插件的页面。它加载在h1标签之后,我很好。我看不出它如何更有效或更清晰。

....但也许我错了 - 我确实说我有点厚。

1
chazza