0

我正在运行一个 Wordpress 网站和我安装的主题,它带有一个显示在主页上的 nivoSlider。现在,我可以通过登录 WP 仪表板并导航到主题选项面板来选择要在主页上显示的滑块。从那里,我可以从下拉列表中选择要在主页上显示的滑块(随着我创建更多滑块,列表会不断填充)。这是与主题选项面板中“滑块”部分相呼应的代码:

//------------------------------------------------------------------------------
// 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文件内),以便它是echo无论我在“主题选项”面板中选择了哪个滑块,都会退出。据我了解,这可能是根据我在“主题选项”面板中的选择来选择滑块的代码:

$slider = of_get_option('gg_sliderimages');

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

期待解决方案。谢谢你。

4

1 回答 1

0

如果我对您的理解正确,您想将代码的第二部分复制到自定义视图(例如 single.php),并回显带有自定义帖子的自定义滑块,您将不得不硬输入这些帖子?

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

其次,注释掉这行代码:

$slider = of_get_option('gg_sliderimages');

您将这样做是因为 $slider 变量包含一组帖子 ID,这些帖子 ID 由自定义主题函数 of_get_option() 转发。之后,您将需要定义自己的数组,就像您想要的那样,一组自定义帖子。例子:

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

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

于 2013-04-11T23:24:12.660 回答