【问题标题】:Wordpress | Design an entire category (Not category page)WordPress |设计整个类别(不是类别页面)
【发布时间】:2017-03-23 21:15:19
【问题描述】:

我正在创建我的第一个 wordpress 主题,我在 google 和 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,正确配置

【问题讨论】:

  • 您是否只想创建一个 index.php 作为包罗万象,然后根据类别更新标记?或者您是否尝试为每个类别创建不同的页面模板?
  • 我正在尝试基于类别进行设计,作为我的示例,我希望“好音乐”类别具有某种设计,我可以在 .php 中进行更改,而垃圾类别具有不同的设计我可以在不同的 .php 文件中创建。
  • 好的,我想我有一个解决方案。
  • 你最终解决了这个问题吗?如果没有,您可以尝试我在下面的答案中输入的更新代码吗?

标签: wordpress wordpress-theming


【解决方案1】:

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

请注意,这会根据类别 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 应该是显示单个帖子的默认文件,无论类别如何。当您导航到单个帖子的 url 时,应该会触发此布局。

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

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

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

如果您将代码放在标头中,它将不起作用,因为标头是独立于在此页面上运行的循环准备的。

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

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

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

我在下面的循环中删除了 div,因为您可能使用也可能不使用引导程序。


在您的页面上放置此代码后,您将在YOUR_THEME_DIR/template-parts/post/ 目录中创建名为content-good-music.phpcontent-not-good-music.php 的文件。关键是您可以在

的末尾添加任何您的类别 slug

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

这里有一些 get_template_part() 文档。

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

【讨论】:

  • 试过了,似乎没有用,我只是对我的常识做了一个完整的评论,并将名称更改为我的类别名称,但显然我没有常识,因为我在点击添加评论之前不小心按了 F5……但是,我做了,检查了一下,创建了 MyThemeFolder > template-parts > posts, folder。
  • 不,它似乎没有影响它我把它放在我的标题中,因为标题在每一页上。 `
    `
  • 我是否想在 add_theme_support('post-formats'); 等函数中加载任何内容?以及某种类型?
  • 发布格式是另一回事。除非您设置了自定义 wp_query,否则您不能将您在评论中的代码放在标题中,我认为您不应该在标题中这样做。这就是为什么我建议您将代码放入 single.php 文件中,这是显示单个帖子的默认文件。我的解决方案中您可能错过的重要部分是您必须“在循环内”运行此代码。我将修复我的解决方案以更好地解释。
  • 抱歉,回复晚了,我实际上使用不同的策略完成了该项目,但是您的回答将对任何想做我想做的事情的人有用。
猜你喜欢
  • 1970-01-01
  • 2017-07-07
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
相关资源
最近更新 更多