Wordpress |设计整个类别(非类别页面)

时间:2017-03-23 21:15:19

标签: wordpress wordpress-theming

我正在创建我的第一个wordpress主题,我在谷歌上搜索过,并且wordpress codex回答了我的问题,但我似乎无法找到我正在寻找的内容,或者无法找到让它运转起来。

我正在尝试做什么,或试图弄清楚,我是如何做到的,所以某个类别有一定的设计。

所以如果我想在“www.domain.com/music/trash/drake-song.mp4.html”中为任何音乐视频制作一个index.php 垃圾类别,它有自己的设计,但歌曲 “www.domain.com/music/good-music/coldplay-viva-la-vida.mp4.html” 好音乐类别,我希望它看起来完全不同。我已尝试在header.php中使用类似的内容;

<?php 
    if( is_tag( 'good-music' ) ):
        $my_classes = array( 'good-class', 'good-class-two' ); 
    else:
        $my_classes = array( 'not-good-class' );
    endif;_

?>

但它似乎只是改变了类别页面。 “www.domain.com/categories/good-music”

任何人都知道我做错了什么?我知道基本的html / css / php / javascript,创建一个WordPress主题的新手,似乎无法让这个工作..

此外: 使用XAMPP在本地托管,使用友好URL,正确配置

1 个答案:

答案 0 :(得分:0)

为了为单个帖子布局生成特定于类别的标记,您可以在调用single.php之后将以下代码放在get_header()文件中。

请注意,这会根据类别slug检查您的类别。因此,如果您的类别slug(您的类别的url版本)与下面的in_array()函数调用中的第一个参数不匹配,那么您应该更改参数以匹配您的类别的slug。

<?php
    /* Start the Loop */
    while ( have_posts() ) : the_post();
        ?>

        <?php
            $categories = get_the_category();
            $catSlugs = array();
            foreach ($categories as $category){
                $catSlugs[] = $category->slug;
            }
            if (in_array('good-music',$catSlugs)){
                $post_cat = 'good-music';
            } else {
                $post_cat = 'not-good-music';
            }
            get_template_part( 'template-parts/post/content', $post_cat );
        ?>

        <?php
    endwhile; // End of the loop.
?>

重要的是,此代码仅出现在存在要循环的查询的位置。

具体来说,主题中的文件single.php应该是显示单个帖子的默认文件,无论其类别如何。当您导航到单个帖子的网址时,应该触发此布局。

作为触发的一部分,只返回该帖子的wordpress查询循环。

然后,while ( have_posts() ) : the_post();endwhile;的代码将运行一次,因为有一个帖子需要处理。

如果有多个帖子,例如在类别页面或默认帖子列表页面上,那么while循环内的代码将运行与查询中的帖子一样多次那个布局。

如果您要将代码放在标题中,它将无法正常工作,因为标题是独立于此页面上运行的循环而准备的。

您可以在标头中运行自定义WP_query(),但这很少是处理网站内容的好方法。

在这种情况下,这是不合适的,因为您正在自定义现有帖子的内容,并且只根据类别进行区分。

因此,只需使用带有自定义布局部分的标准布局文件。

我在下面的循环中删除了div,因为你可能使用或不使用bootstrap。

将此代码放在您的页面上后,您将在content-good-music.php目录中创建名为content-not-good-music.phpYOUR_THEME_DIR/template-parts/post/的文件。关键是你要将你的类别slug添加到

的末尾

这些文件将包含这类帖子的唯一标记。您还可以在帖子列表循环中使用类似的逻辑,为每个类别列出他们自己唯一的php文件。

这里有一些get_template_part()文档。

https://developer.wordpress.org/reference/functions/get_template_part/