Php 使用WordPress Options API保存短码数组,然后在另一个函数中输出
注意:虽然这可能是一个简单的修复方法,但我对使用数组还不熟悉,完全被难住了。 我试图通过WordPress中的Options API保存一个短代码数组中的数据,然后调用该数组,并使用该数据创建另一个数组以连接到插件函数中。这是一个响应滑块插件,我基本上是在尝试为它附加一个短代码,这样我就可以在后端创建滑块,并在前端显示它,短代码如下:Php 使用WordPress Options API保存短码数组,然后在另一个函数中输出,php,arrays,wordpress,shortcode,Php,Arrays,Wordpress,Shortcode,注意:虽然这可能是一个简单的修复方法,但我对使用数组还不熟悉,完全被难住了。 我试图通过WordPress中的Options API保存一个短代码数组中的数据,然后调用该数组,并使用该数据创建另一个数组以连接到插件函数中。这是一个响应滑块插件,我基本上是在尝试为它附加一个短代码,这样我就可以在后端创建滑块,并在前端显示它,短代码如下:[responsive\u slider slider\u name=“imageslider”] 实现文档可以是,下面是我的代码: function respon
[responsive\u slider slider\u name=“imageslider”]
实现文档可以是,下面是我的代码:
function responsive_gallery_shortcode($atts, $content=null) {
extract(shortcode_atts( array('slider_name' => 'product_page') , $atts));
foreach ($slider_name as $value) {
update_option('_unique_slider_name', $value );
}
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');
if (!function_exists('custom_set_flexslider_hg_rotators')) {
function custom_set_flexslider_hg_rotators() {
$slider_name = get_option('_unique_slider_name');
foreach ($slider_name as $value) {
$rotators = array();
$rotators[ $value ] = array( 'size' => $value );
return $rotators;
}
}
}
add_filter('flexslider_hg_rotators', 'custom_set_flexslider_hg_rotators', 9999);
我在两个
foreach
函数上都遇到“为foreach()提供的参数无效”错误。在我有两个短代码的页面上,两个错误都显示两次。似乎$slider\u name
是字符串而不是数组,但必须有一种方法将其保存在update\u option()
函数中,以便它返回数组。我对阵列非常陌生,我在这里肯定很挣扎。我花了好几个小时在这方面,已经在WordPress方面得到了一些帮助,但我还没有完全得到 由于shortcode属性将作为字符串到达,因此需要首先将其转换为数组
同时,由于必须将其作为字符串传递,因此需要使用分隔符以便进行管理
对于所有这些,您将需要PHP函数
结果:
array (size=1)
0 => string 'one' (length=3)
及
结果:
array (size=1)
0 => string 'one' (length=3)
PS:始终值得参考PHP手册及其每一页中的注释:
[更新]
您的原始代码存在许多问题,请查看此修订版本的注释:
function responsive_gallery_shortcode($atts, $content=null) {
extract(shortcode_atts( array('slider_name' => 'product_page') , $atts));
// Convert string into array
// Using comma as separator when writing the shortcode in the post
$array_slider = explode( ',', $slider_name );
// YOU DON'T NEED A `foreach` HERE
//foreach ($array_slider as $value) {
update_option('_unique_slider_name', $array_slider );
//}
// I DON'T KNOW WHAT THIS FUNCTIONS DOES
// But in any case, being $array_slider an array, maybe it should be inside a `foreach`
if(function_exists('show_flexslider_rotator'))
echo show_flexslider_rotator( $array_slider );
// THIS DOESN'T MAKE SENSE
// You're not supposed to be adding images sizes at each Shortcode call
// And you are dealing with an array
add_image_size( $slider_name , '550', '250', true );
}
add_shortcode('responsive_gallery', 'responsive_gallery_shortcode');
if (!function_exists('custom_set_flexslider_hg_rotators')) {
function custom_set_flexslider_hg_rotators() {
// The option was already saved as array, so we can work directly with it
$slider_name = get_option('_unique_slider_name');
// YOU DON'T WANT TO DECLARE THE VARIABLE AT EACH STEP OF THE LOOP
$rotators = array();
foreach ($slider_name as $value) {
$rotators[ $value ] = array( 'size' => $value );
}
// RETURN THE VALUE ONLY AFTER COMPLETING THE LOOP
return $rotators;
}
// PUT THE FILTER HOOK INSIDE if(!function_exists())
add_filter('flexslider_hg_rotators', 'custom_set_flexslider_hg_rotators', 9999);
}
由于shortcode属性将作为字符串到达,因此需要首先将其转换为数组 同时,由于必须将其作为字符串传递,因此需要使用分隔符以便进行管理 对于所有这些,您将需要PHP函数 结果:
array (size=1)
0 => string 'one' (length=3)
及
结果:
array (size=1)
0 => string 'one' (length=3)
PS:始终值得参考PHP手册及其每一页中的注释:
[更新]
您的原始代码存在许多问题,请查看此修订版本的注释:
function responsive_gallery_shortcode($atts, $content=null) {
extract(shortcode_atts( array('slider_name' => 'product_page') , $atts));
// Convert string into array
// Using comma as separator when writing the shortcode in the post
$array_slider = explode( ',', $slider_name );
// YOU DON'T NEED A `foreach` HERE
//foreach ($array_slider as $value) {
update_option('_unique_slider_name', $array_slider );
//}
// I DON'T KNOW WHAT THIS FUNCTIONS DOES
// But in any case, being $array_slider an array, maybe it should be inside a `foreach`
if(function_exists('show_flexslider_rotator'))
echo show_flexslider_rotator( $array_slider );
// THIS DOESN'T MAKE SENSE
// You're not supposed to be adding images sizes at each Shortcode call
// And you are dealing with an array
add_image_size( $slider_name , '550', '250', true );
}
add_shortcode('responsive_gallery', 'responsive_gallery_shortcode');
if (!function_exists('custom_set_flexslider_hg_rotators')) {
function custom_set_flexslider_hg_rotators() {
// The option was already saved as array, so we can work directly with it
$slider_name = get_option('_unique_slider_name');
// YOU DON'T WANT TO DECLARE THE VARIABLE AT EACH STEP OF THE LOOP
$rotators = array();
foreach ($slider_name as $value) {
$rotators[ $value ] = array( 'size' => $value );
}
// RETURN THE VALUE ONLY AFTER COMPLETING THE LOOP
return $rotators;
}
// PUT THE FILTER HOOK INSIDE if(!function_exists())
add_filter('flexslider_hg_rotators', 'custom_set_flexslider_hg_rotators', 9999);
}
谢谢你的帮助。我正在努力解决这个问题。使用上面的示例,如果我执行$array=explode(),那么数组现在存储在$array中,对吗?我试图做一个foreach语句,看起来像
foreach($array as$value){$rotators[$value]=array('size'=>$value);}
,但它只输出最后一个要存储的值,就像上面的函数一样。知道如何让它工作吗?@JeremiahPrummer,我们的原始代码有很多问题,请检查更新的答案。不工作,但在这一点上,我认为只是我连接的插件不是设计成这样工作的。我将求助于在需要的地方手动添加它,因为这比通过一个短代码来实现要容易得多(也更可靠)。谢谢你的帮助,你教会了我很多。谢谢你的帮助。我正在努力解决这个问题。使用上面的示例,如果我执行$array=explode(),那么数组现在存储在$array中,对吗?我试图做一个foreach语句,看起来像foreach($array as$value){$rotators[$value]=array('size'=>$value);}
,但它只输出最后一个要存储的值,就像上面的函数一样。知道如何让它工作吗?@JeremiahPrummer,我们的原始代码有很多问题,请检查更新的答案。不工作,但在这一点上,我认为只是我连接的插件不是设计成这样工作的。我将求助于在需要的地方手动添加它,因为这比通过一个短代码来实现要容易得多(也更可靠)。谢谢你的帮助,你教会了我很多。