2014-10-28 106 views
0

我正在使用wordpress插件。在插件中,用户首先添加一个滑块,然后添加相关滑块的图像。从php函数问题传递参数

首先我用shortcode做到这一点。用户在短代码中输入滑块的短名称,并输入相关滑块的图像幻灯片,如[foo_slider slider=slider_one][foo_slider slider=slider_two]

现在我“也”想要该片段,该用户可以在代码中添加代码片段,例如echo wp_foo_slider(slider_two)。但我没有明白。

请指导我,我该怎么做。

这是我的代码为简码的工作原理:

<?php 
function wp_foo_sliders($atts) { 
    global $wpdb; 
    $tbl_sliders = $wpdb->prefix . "foo_sliders"; 

    ob_start(); 
    extract(shortcode_atts(array(
     'slider' => '', 
        ), $atts)); 

    $get_sliders = $wpdb->get_results("Select * From $tbl_sliders Where slider_shortname = '$slider'"); 
?> 
    <div class="foo_main_slider"> 
    <?php 
     foreach ($get_sliders as $get_slider) { 
      $slider_id = $get_slider->slider_id; 
    ?> 
    <div class="foo_slider_img"> 
    <?php 
     $get_slider_image = $wpdb->get_results("Select * From ".$wpdb->prefix."foo_images Where 

slider_id = $slider_id Order By image_order ASC"); 

     foreach ($get_slider_image as $foo_img) { 
    ?> 
     <img src="<?php echo $foo_img->image_path . $foo_img->image_name; ?>" alt=""> 
    <?php 
     } 
     } 
     return ob_get_clean(); 
} 

add_shortcode("foo_slider", "wp_foo_sliders"); 
?> 

我也试试这个由我自己<?php echo wp_foo_sliders("slider_two") ?><?php echo wp_foo_sliders(slider_two) ?>,在代码中,当我刷新浏览器只<div class="foo_main_slider"> </div>出现无图像显示。

编辑:我想用户可以使用短代码<?php echo do_shortcode('[foo_slider slider=slider_one]'); ?>或用户可以使用片断<?php echo wp_foo_sliders("slider_two") ?>,只有简码工作,内容片段无法正常工作。

我犯了什么错误,请帮助我。

+0

你想手动使用短代码在你的PHP文件。是这样吗? – 2014-10-28 06:16:55

+0

编辑我的问题@Rohil_PHPBeginner – deemi 2014-10-28 06:24:06

+0

你的简码的名字叫做'foo_slider',不'wp_foo_sliders' – 2014-10-28 06:39:58

回答

0

所以我用我自己的让我的解决方案。

我提出一个新的功能是:

<?php 
function foo_sliders($foo_short_name) { 
    global $wpdb; 
    $tbl_sliders = $wpdb->prefix . "foo_sliders"; 

    $get_sliders = $wpdb->get_results("Select * From $tbl_sliders Where slider_shortname = '$slider'"); 
?> 
    <div class="foo_main_slider"> 
    <?php 
     foreach ($get_sliders as $get_slider) { 
      $slider_id = $get_slider->slider_id; 
    ?> 
    <div class="foo_slider_img"> 
    <?php 
     $get_slider_image = $wpdb->get_results("Select * From ".$wpdb->prefix."foo_images Where 

slider_id = $slider_id Order By image_order ASC"); 

     foreach ($get_slider_image as $foo_img) { 
    ?> 
     <img src="<?php echo $foo_img->image_path . $foo_img->image_name; ?>" alt=""> 
    <?php 
     } 
     } 
    ob_start(); 
    return $foo_short_name; 
    return ob_get_clean(); 
} 

?> 

而在主题代码:

<?php foo_sliders(short_name) ?> 

及其工作大

1

当你直接调用shortcode函数时,你传递一个字符串给它。当您使用简码方式时,WordPress会将参数转换为关联数组。

尝试重构你的代码

if(is_array($atts)) { 
    //Called using shortcode so $atts is an array 
    extract(shortcode_atts(array(
     'slider' => '', 
        ), $atts)); 

} else { 
    //Function called directly so $atts is a string 
    $slider = $atts; 
}