从php函数传递参数问题

从php函数传递参数问题,php,wordpress,Php,Wordpress,我正在开发wordpress插件。在插件中,用户首先添加一个滑块,然后添加相关滑块的图像 首先,我用shortcode做这个。用户在短代码中输入滑块的短名称,并对相关滑块的幻灯片进行图像处理,如下所示[foo\u slider slider=slider\u one]或[foo\u slider slider=slider\u two] 现在我“还”想要这个代码段,用户可以像这样在代码中添加snippetelse短代码echo wp\u foo\u slider(slider\u two)。但我

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

首先,我用shortcode做这个。用户在短代码中输入滑块的短名称,并对相关滑块的幻灯片进行图像处理,如下所示
[foo\u slider slider=slider\u one]
[foo\u slider slider=slider\u two]

现在我“还”想要这个代码段,用户可以像这样在代码中添加snippetelse短代码
echo wp\u foo\u slider(slider\u 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");
?>

当您直接调用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;
}

所以我自己得到了解决方案

我为此创建了一个新函数:

<?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文件中手动使用该短代码。是这样吗?我编辑了我的问题@Rohil_phpBeginnery你的短代码叫做
foo_slider
,而不是
wp___sliders
wp___sliders()是我调用幻灯片图像的函数名,但是这个函数是通过短代码修改的。你有没有在codex中查看过Shortcode API?如何使用Shortcode?如何使用属性来修改Shortcode返回的内容
<?php foo_sliders(short_name) ?>