我正在创建我的第一个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,正确配置
答案 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.php
和YOUR_THEME_DIR/template-parts/post/
的文件。关键是你要将你的类别slug添加到
这些文件将包含这类帖子的唯一标记。您还可以在帖子列表循环中使用类似的逻辑,为每个类别列出他们自己唯一的php文件。
这里有一些get_template_part()
文档。
https://developer.wordpress.org/reference/functions/get_template_part/