直接从代码调用特定滑块

时间:2013-04-11 11:58:29

标签: php wordpress slider echo nivo-slider

我正在运行一个Wordpress网站和我安装的主题,它附带一个nivoSlider,显示在主页上。现在,我可以通过登录WP Dashboard并导航到Theme Options面板来选择要在主页上显示的滑块。从那里,我可以在主页上从下拉列表中选择要显示的滑块(当我创建更多滑块时,列表会继续填充)。这是在主题选项面板中回显“滑块”部分的代码:

//------------------------------------------------------------------------------
// SLIDER
//------------------------------------------------------------------------------

        $options[] = array( "name" => __('SLIDER','gxg_textdomain'),
                                                "type" => "heading",
                                                "img" => "/includes/admin/images/s.png");

        $options[] = array( "name" => __('Set up your slider','gxg_textdomain'),
        "type" => "info");


        $options[] = array( "name" => __('Show Slider on Homepage','gxg_textdomain'),
                                                "id" => $shortname."_slider",
                                                "std" => "1",
                                                "type" => "checkbox");


        $options[] = array( "name" => __('Select a Slider','gxg_textdomain'),
                                                "desc" => __('After you have created a slider, you can select it here.','gxg_textdomain'),
                                                "id" => $shortname."_sliderimages",
                                                "type" => "select",
                                                "options" => $options_slides);

这是header.php文件中的代码,它回显了主页上的滑块:

<?php get_template_part( 'slider' ); ?>

目前,如果我将上述代码放在任何模板文件中以显示该特定模板上的滑块,则显示的唯一滑块是从主题选项面板中选择的滑块。这是slider.php文件中的代码:

<div id="slider" class="nivoSlider">



        <?php

                if ( of_get_option('gg_slider') && of_get_option('gg_sliderimages') ) {



                        global $wpdb, $post;



                        $slider = of_get_option('gg_sliderimages');

                        $meta = get_post_meta( $slider, 'gxg_slider_images', false );



                        if ( !is_array( $meta ) )

                                $meta = ( array ) $meta;



                        if ( !empty( $meta ) ) {

                                $meta = implode( ',', $meta );



                                $images = $wpdb->get_col( "

                                        SELECT ID FROM $wpdb->posts

                                        WHERE post_type = 'attachment'

                                        AND ID IN ( $meta )

                                        ORDER BY menu_order ASC

                                    " );



                                foreach ( $images as $att ) {

                                        // Get image's source

                                        $src = wp_get_attachment_image_src( $att, 'full' );

                                        $src = $src[0];



                                        $caption = get_post_meta( $att , '_slidercaption', true);

                                        $caption = htmlspecialchars($caption, ENT_QUOTES);



                                        $cf = get_post_meta( $att , '_sliderurl', true);



                                        // Show image

                                        if ($cf) {    

                                        echo "<a href='$cf'><img src='{$src}' alt='' title='$caption' /></a>";

                                        } else {    

                                        echo "<img src='{$src}' alt='' title='$caption' />";

                                        }



                                }

                        }        

                }        

        ?>

</div><!-- .slider--> 

我基本上想要做的是我想修改slider.php文件,以便我可以直接输入滑块的ID或滑块的slug(在slider.php文件中)所以无论我在“主题选项”面板中选择哪个滑块,它都会回显。根据我的理解,这可能是根据我在“主题选项”面板中的选择选择滑块的代码:

$slider = of_get_option('gg_sliderimages');

而不是上面代码中的“of_get_option('gg_sliderimages')”,我想知道是否有任何方法可以输入我想要显示的滑块的ID / slug。

期待解决方案。谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将代码的第二部分复制到自定义视图(例如single.php),并使用自定义帖子回显自定义滑块,这些帖子应该是您难以输入的?

好吧,在您复制代码之后,您应该删除第一个需要模板选项参数的条件,正如您已经想到的那样。这样,无论您在菜单中选择了什么,它都将始终显示滑块。

其次,注释掉这行代码:

$slider = of_get_option('gg_sliderimages');

你要这样做是因为$ slider变量包含一个由自定义主题函数of_get_option()转发的帖子ID数组。 之后,您需要根据需要定义自己的数组,自定义帖子数组。 例如:

$slider[] = array('123', '256', '455');

另外,请记住,重新定义全局变量可能会进一步破坏代码,例如,如果您的single.php文件期望之前定义的$ post by query_posts();在这种情况下,您应该在foreach循环后重置查询。