Wordpress:让模板输出所有类别为x的帖子,其中x是动态分配的


Wordpress: have template output all posts with category x where x is assigned dynamically

我正试图创建一系列页面,在单个类别中显示帖子。为此,我使用以下PHP代码:

<?php
    $args = array( 'category' => '$CATEGORY', 'numberposts' => 10000000000);
    $myposts = get_posts( $args );
    foreach($myposts as $post) :
    setup_postdata($post);
?>

我的问题是$CATEGORY似乎不包含作为字符串的类别。我已经尝试使用%s和$id,但由于我没有声明它是我想要的类别id,所以它无法工作。结果输出要么是一个错误,要么是所有帖子,无论类别如何。

什么参数将传递类别字符串?

下面是说明问题的页面。这是一个类别页面,意味着它应该包含所有必要的信息。如果它有效,它只会显示最上面的帖子,因为它是网站上唯一一个有"新闻发布"类别的帖子。值得一提的是,我还有一个类似的页面,叫做"Dokument",它显示了新闻稿。

页码:http://www.skinwellness.se/category/pressrelease/

编辑

我以前没有注意到这一点,但似乎您正在使用捆绑主题Twentythierten。只需从您的子主题中删除category.php即可。如果您直接对父主题进行了更改,则应该获得该主题的新副本,并使用所有修改创建子主题。永远不要对你没有写的主题进行更改。当这样的主题更新时,你所有的改变都将永远消失

然后,您只需要孩子主题的functions.php中的pre_get_posts部分,就可以让每个人都使用

原始答案

你的问题纯粹是你的自定义循环。正如链接文章中所解释的,你不应该在任何类型的档案页面或你的主页上使用自定义查询来代替主查询

要解决此问题,请恢复到默认循环。这就是你应该拥有的。无get_posts或foreach循环

if( have_posts() ) {
   while( have_posts() ) {
   the_post();
   // Add your loop elements here like the_title() and the_content()
   }
}

这应该可以解决这样的问题,即当你访问一个类别页面时,只会查看已查看的类别,不会显示其他类别的帖子

现在,如果您需要更改类别页面上的任何内容,请使用pre_get_posts进行更改。使用is_category()条件标记仅针对您的类别页面。您也可以使用此标签瞄准特定类别

例如,你需要在类别页面上更改每页的帖子,根据你的情况,显示所有没有分页的帖子,你可以在你的功能中这样做。php

function so26589648_category_ppp( $query ) {
    if ( !is_admin() && $query->is_category() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '-1' );
    }
}
add_action( 'pre_get_posts', 'so26589648_category_ppp' );

例如,如果你需要将订单更改为ASC,并且需要按作者订购帖子,你可以这样做

function so26589648_category_ppp( $query ) {
    if ( !is_admin() && $query->is_category() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '-1' );
        $query->set( 'order', 'ASC' );
        $query->set( 'orderby', 'author' );
    }
}
add_action( 'pre_get_posts', 'so26589648_category_ppp' );

您应该看到WP_Query中的所有可用参数来使用