我在WordPress网站上工作,安装了一个滑块插件,在后端注册一个滑块(或多个滑块),然后在前端显示几个简单的php代码片段。我正在尝试修改插件,这样我就可以用一个短代码做同样的事情。我希望短代码能够在后端注册插件,并在前端使用以下内容显示插件:[responsive_gallery slider_name="slider"]
.
我已经把那个部分搞定了,我甚至可以用短代码显示滑块。我只是在后端注册时遇到问题。我在底部的代码可以工作,但我希望有一种方法可以获取存储在shortcode attributes数组($slider\\u name)中的值,并在set_flexslider_hg_rotators()
作用我已经试了好几个小时了,什么都没找到。关于如何最好地做到这一点,有什么建议吗?
以下是插件代码:
后端注册:
function set_flexslider_hg_rotators()
{
$rotators = array();
$rotators[\'homepage\'] = array( \'size\' => \'homepage-rotator\' );
return $rotators;
}
add_filter(\'flexslider_hg_rotators\', \'set_flexslider_hg_rotators\');
前端显示器:
<?php if(function_exists(\'show_flexslider_rotator\')) echo show_flexslider_rotator( \'homepage\' ); ?>
这是我的工作代码:
function responsive_gallery_shortcode($atts, $content=null) {
extract(shortcode_atts( array(\'slider_name\' => \'product_page\') , $atts));
if(function_exists(\'show_flexslider_rotator\')) echo show_flexslider_rotator( $slider_name );
add_image_size( $slider_name , \'550\', \'250\', true );
}
add_shortcode(\'responsive_gallery\', \'responsive_gallery_shortcode\');
function set_flexslider_hg_rotators() {
$rotators = array();
$rotators[ \'product_page\' ] = array( \'size\' => \'product_page\' );
return $rotators;
}
add_filter(\'flexslider_hg_rotators\', \'set_flexslider_hg_rotators\');
我希望能够在
set_flexslider_hg_rotators
功能,但我不确定什么是最好的方法(或者是否可能)。希望它看起来像:
function set_flexslider_hg_rotators()
{
$rotators = array();
$rotators[$slider_name] = array( \'size\' => $slider_name );
return $rotators;
}
add_filter(\'flexslider_hg_rotators\', \'set_flexslider_hg_rotators\');
由于$slider\\u name不是全局的,因此此函数不会返回任何内容(如预期的那样)。有没有办法做到这一点?
最合适的回答,由SO网友:Dwayne Charrington 整理而成
为了能够使用基本上在shortcode函数中创建的变量,您需要将其存储在某个位置,然后检索该值。Wordpress确实在内部使用全局变量来存储和传递值,但我不建议您这样做。
了解选项APIhere. 功能非常简单。
So something like the following would work within your shortcode function:
update_option(\'_unique_slider_name\', $slider_name);
Then inside of your filter function (or anywhere) you can access the value like this:
$slider_name = get_option(\'_unique_slider_name\');
该值将被缓存,因此在尝试访问该值时,不要担心重复的数据库命中。