2010-10-09 163 views
0

当前正在生成一个允许多个图像滑块的Wordpress插件。目前,为了确保代码有效,我不得不将每个滑块动态样式加载到标签中。这很好,但是它加载了所有滑块的样式,如果用户使用多个图像滑块,真的可以开始向页面源添加大量代码。foreach循环帮助PHP

所以我试图让样式只添加到标签,如果滑块实际上显示在页面上。这可能吗?这是我目前如何显示造型:

function test() { 
global $wpdb; 
$table_name = $wpdb->prefix . "premiumslider"; 
$number = $wpdb->get_results("SELECT * FROM $table_name"); 
foreach ($number as $slider) { ?> 
<style type="text/css"><?php if($slider->paginationstyle == 'icons') { ?> 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li{<?php if($slider-  >paginationstyle=='icons'){ ?>background: url(<?php if($slider->paginationoff=='') echo WP_PLUGIN_URL.'/premium-slider/images/pagination.png'; if($slider->paginationoff!='') echo $slider->paginationoff; ?>) 0 0 no-repeat;<?php } ?>} 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active{<?php if($slider->paginationstyle=='icons'){ ?>background: url(<?php if($slider->paginationon=='') echo WP_PLUGIN_URL.'/premium-slider/images/pagination_current.png'; if($slider->paginationon!='') echo $slider->paginationon; ?>) 0 0 no-repeat;<?php } ?>} 
<?php } ?> 
<?php if($slider->paginationstyle == 'images') { ?> 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator { margin-top: 50px; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li img { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imgcolour; ?>; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active img { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imghover; ?>; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active img:hover { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imghover; ?>; } 
    <?php } ?></style><?php 
} 
} 

我该如何做到这一点?

要显示上面的代码使用:

add_action('wp_head','test'); 

并显示该滑块($ ID为那个特定的滑块的id; 1,2,3等):

premium_slider($id); 

回答

0

这是一个复杂的问题。首先,我蔑视你使用全局变量,尤其是数据库资源。我也不清楚为什么你需要以这种方式直接回应样式。

我们帮助您:

要真正解决这个问题,我可以看到的唯一方法是,如果你把所有的存储在某个地方的风格,如DB,一个配置文件,或者每款式任何这样的事情。你必须事先知道样式,因为你在这里很难编码。因此,只需循环,如果滑块的ID与其样式相匹配,则打印样式。如果您将所有样式存储在另一个使用滑块ID散列的php文件中的大数组中,这将很简单。

+1

您看到的全局$ wpdb实际上旨在被Wordpress用作全局。 – neopickaze 2010-10-09 07:21:29

+0

它可以作为参数传递给函数。 Wordpress是设计之王吗? – 2010-10-09 07:27:18

+0

访问数据库需要全局变量,因此,如果您不添加,为什么这些都不起作用;全球$ wpdb。你怎么能通过ID循环找到一个匹配?我无法弄清楚自己,因为你无法将参数传递给函数test();因为add_action('wp_head','test');不允许他们 - 或者我可以相信;也许你可以但我不知道怎么样。 – 2010-10-09 09:28:19

0

你如何确定哪些滑块出现在页面上?实际上,您需要将查询更改为实际加载滑块的查询,这样才会加载CSS以显示相同的滑块。

$table_name = $wpdb->prefix . "premiumslider"; 
$number = $wpdb->get_results("SELECT * FROM $table_name WHERE category = 'cars'"); 

这只会将元素加载到显示在该特定页面上的foreach数组中。

+0

category ='cars'的意义是什么? – 2010-10-09 09:44:30