列出单个页面上的所有类别以及属于wordpress中jquery滑块内的类别的所有页面

时间:2014-03-23 15:45:43

标签: wordpress-theming wordpress

我真的需要一些帮助。从昨天早上起,我一直在试着为我女朋友在wordpress中的烘焙和烹饪食谱博客建立一个定制设计,我现在对此感到非常沮丧。 我按照Lynda.com教程在wordpress中进行自定义设计,我设法将模板分成标题,主要部分和页脚,但之后我有点卡住了。 这是一个原始的html页面,用于查看网站的外观: http://natalija.co.nf/index.html

这是我需要帮助的地方。我希望主页面被分成几个部分,每个部分都有一个唯一的ID和数据 - 恒星 - 背景比=“0.5”用于视差背景效果。这些部分代表类别(蛋糕,饼干,饮料,餐具等)。每个类别应包含一篇文章,其中包含自己的类和data-stellar-ratio =“1.5”。在一篇文章中,将有一个带有类别标题的h1标签和一个jquery滑块,它包含指向该类别食谱的链接。 因此,部分的结构应如下所示:

<section id="teroteikolaci" data-stellar-background-ratio="0.5">
    <article class="torteikolaci" data-stellar-ratio="1.5">
        <h1>TORTE I KOLAČI</h1>
        <div class="wrapper">
            <ul class="slider">
                <li class="slide">
                    <a href="#">
                        <img src="wp-content/themes/Natalija/images/torte-i-kolaci-thumb01.jpg" alt="random">
                        <div class="bubble">
                            <h5>Čoko mousse torta 1</h5>
                        </div>
                    </a>
                </li>
                <li class="slide">
                    <a href="#">
                        <img src="wp-content/themes/Natalija/images/torte-i-kolaci-thumb02.jpg" alt="random">
                        <div class="bubble">
                            <h5>Čoko mousse torta 2</h5>
                        </div>
                    </a>
                </li>
                <li class="slide">
                    <a href="#">
                        <img src="wp-content/themes/Natalija/images/torte-i-kolaci-thumb03.jpg" alt="random">
                        <div class="bubble">
                            <h5>Čoko mousse torta 3</h5>
                        </div>
                    </a>
                </li>
            </ul>
        </div>
    </article>
</section>

正如我所说,我设法将模板分为header.php,footer.php和home.php, 但是我只设法将原始的html代码放入home.php中,我想用动态内容替换它,但是我迷失了教程中的那个人。 我不希望类别是单独的页面。我希望它们都显示在主页中。我该如何做到这一点? 我是wordpress的新手,所以仪表板有点让我感到困惑,我对wordpress php函数并不熟悉,所以如果有人能给我一些如何解决这个问题的指导,我真的很感激。

编辑:

        <?php
    $args = array(
        'orderby' => 'name',
        'order' => 'ASC'
    );
    $categories = get_categories($args);
    foreach($categories as $category) {
        ?>

    <section id="<?php echo $category->slug; ?>" data-stellar-background-ratio="0.5">
        <article class="<?php echo $category->slug; ?>" data-stellar-ratio="1.5">
            <h1><?php echo $category->name; ?></h1>
            <div class="wrapper">
                <ul class="slider">

        <?php
    }

    $args = array (
        'post_status' => 'publish',
        'category_name' => $category->slug,
        'nopaging' => true,
    );
    $custom_query = new WP_Query( $args );

    if ( $custom_query->have_posts() ) {
        while ( $custom_query->have_posts() ) {
            $custom_query->the_post();

                // begin your slider loops in here
                ?>

                    <li class="slide">
                        <a href="<?php echo get_permalink(); ?>">
                            <?php the_post_thumbnail(); ?>
                            <div class="bubble">
                                <h5><?php echo get_the_title(); ?></h5>
                            </div>
                        </a>
                    </li>
    <?php }
    } else {
        // no posts found
    }

    /* Restore original Post Data */
    wp_reset_postdata();
    ?>

                </ul>
            </div>
        </article>
    </section>

1 个答案:

答案 0 :(得分:2)

WordPress使用WP_Query对象提取帖子/页面(好的一点是它有很好的文档记录,你有权使用它并自定义它)。我建议您为每个部分创建一个专用循环(使用WP_Query)。让我告诉你如何...

使用“TORTEIKOLAČI”作为第一个示例,就在开始该部分之前,您可以创建一个 new 循环:

// WP_Query arguments allow you to filter out / sort which posts you want
// In this example, I'm just telling WordPress to give me ONLY posts under the 
// TORTE I KOLAČI category and NOT to use paging (so you get ALL posts in that 
// category without limits)
$args = array (
    'post_status' => 'publish',
    'category_name' => 'torte_i_kolaci',
    'nopaging' => true,
);

// The Query
$custom_query = new WP_Query( $args );

注意:category_name实际上是该类别的slug(您可以在您定义的每个类别下的管理部分中找到它。)

现在是时候使用$custom_query

每个部分仍然会包含这样的包装代码:

<section id="teroteikolaci" data-stellar-background-ratio="0.5">
    <article class="torteikolaci" data-stellar-ratio="1.5">
        <h1>TORTE I KOLAČI</h1>
        <div class="wrapper">
            <ul class="slider">

除此之外,您将切换到PHP并使用the_post_thumbnailget_the_titleget_permalink等功能,如下所示:

<?php
if ( $custom_query->have_posts() ) {
    while ( $custom_query->have_posts() ) {
        $custom_query->the_post();

            // begin your slider loops in here
            ?>

            <li class="slide">
                <a href="<?php echo get_permalink(); ?>">
                    <?php the_post_thumbnail(); ?>
                    <div class="bubble">
                        <h5><?php echo get_the_title(); ?></h5>
                    </div>
                </a>
            </li>
    }
} else {
    // no posts found
}

/* Restore original Post Data */
wp_reset_postdata();
?>

现在您已经完成了所有帖子,现在是时候关闭包装了......

            </ul>
        </div>
    </article>
</section>

现在,您可以为计划列出的每个类别(SITNIKOLAČI,NAPICI等)重复此模式。

一些笔记

我认为你的帖子实际上是帖子而不是页面(对于循环中的每个项目)。如果您需要页面,可以改变$args数组,如下所示:

$args = array (
    'post_type' => 'page',
    'post_status' => 'publish',
    'category_name' => 'torte_i_kolaci',
    'nopaging' => true,
);

深入查看代码中的WP_Query页面,了解这些查询的灵活性。

您可能希望通过首先获取您的类别然后循环这些代码来输出您的代码甚至更多动态且易于维护“外包装”。 WordPress有一个名为get_categories的函数,我一直都在使用它。 get_categories也有自己的$args数组,因此请查看文档以了解您可以使用它做什么。您可以像这样构建代码:

$args = array(
    'orderby' => 'name',
    'order' => 'ASC'
);
$categories = get_categories($args);
foreach($categories as $category) {
    ?>

<section id="<?php echo $category->slug; ?>" data-stellar-background-ratio="0.5">
    <article class="<?php echo $category->slug; ?>" data-stellar-ratio="1.5">
        <h1><?php echo $category->name; ?></h1>
        <div class="wrapper">
            <ul class="slider">

    <?php
}

现在很酷的部分!您可以从$category->slug值驱动所有内部循环(使用WP_Query),如此...

$args = array (
    'post_status' => 'publish',
    'category_name' => $category->slug,
    'nopaging' => true,
);

全部放在一起

所以这就是整个代码片段的样子(我为一些大括号添加了一些注释,帮助你看到某些循环开始和结束的位置)。

<?php
$args = array(
    'orderby' => 'name',
    'order' => 'ASC'
);
$categories = get_categories($args);
foreach($categories as $category) {
    ?>

    <section id="<?php echo $category->slug; ?>" data-stellar-background-ratio="0.5">
        <article class="<?php echo $category->slug; ?>" data-stellar-ratio="1.5">
            <h1><?php echo $category->name; ?></h1>
            <div class="wrapper">
                <ul class="slider">

                <?php
                    $args = array (
                        'post_status' => 'publish',
                        'category_name' => $category->slug,
                        'nopaging' => true,
                    );
                    $custom_query = new WP_Query( $args );

                    if ( $custom_query->have_posts() ) {
                        while ( $custom_query->have_posts() ) {
                            $custom_query->the_post();

                                // begin your slider loops in here
                                ?>

                                    <li class="slide">
                                        <a href="<?php echo get_permalink(); ?>">
                                            <?php the_post_thumbnail(); ?>
                                            <div class="bubble">
                                                <h5><?php echo get_the_title(); ?></h5>
                                            </div>
                                        </a>
                                    </li>

                    <?php } // end $custom_query loop

                    } else {
                        // no posts found
                    }

                    // reset the postdata
                    wp_reset_postdata();
                ?>

                </ul>
            </div>
        </article>
    </section>
<?php
} // end $categories loop
?>

希望这有助于让你脱离困境,玩得开心!