如何在单独的功能中使用快捷码属性

时间:2013-02-26 作者:Jeremiah Prummer

我在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不是全局的,因此此函数不会返回任何内容(如预期的那样)。有没有办法做到这一点?

1 个回复
最合适的回答,由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\');
该值将被缓存,因此在尝试访问该值时,不要担心重复的数据库命中。

结束

相关推荐

Optimize shortcode callbacks

我创建了一个插件,在我的WordPress站点中添加了一些短代码。但我是一个PHP新手,所以我相信它可能有一些错误或优化它的方法。它工作正常,显然没有问题。内存使用率为00.04MB。你能看看吗?非常感谢!add_action( \'wp_enqueue_scripts\', \'prefix_add_my_stylesheet\' ); function prefix_add_my_stylesheet() { // Respects SSL, Styl