从php函数问题传递参数

时间:2014-10-28 06:12:12

标签: php wordpress wordpress-plugin

我正在制作wordpress插件。在插件中,用户首先添加滑块,然后添加相关滑块的图像。

首先我使用短代码制作它。用户在短代码中输入滑块的简称,并在相关滑块的图像幻灯片中输入[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") ?>,只有短代码正常工作,代码段不起作用。

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

2 个答案:

答案 0 :(得分:1)

直接调用短代码函数时,您将向其传递一个字符串。当您使用短代码方式时,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;
}

答案 1 :(得分: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) ?>

它的工作很棒