带有格式化帖子列表的静态页面

时间:2020-01-03 作者:Will Appleby

如果这个问题没有被问到,我会很惊讶,但我做了一个快速搜索,没有找到答案,所以。。。

我有几个Wordpress网站,在这两种情况下,我都希望页面顶部包含静态内容(可能是顶部图像、标题和一个或多个段落),然后在下面是符合特定类别的格式良好的帖子列表。

我搜索了一些插件,并尝试了一个提供帖子链接的插件(它被称为“最新帖子短码”),但它非常难看。我希望帖子的格式与标准帖子页面上的格式相同(图片和节选带有“阅读更多”链接)。

我真的不明白Wordpress为什么不提供这种开箱即用的功能,我想这是一个相当典型的要求。在我的例子中,我有一个旅游网站,我希望每个目的地都有一个静态页面,其中包含一些介绍性文本,然后是与该目的地相关的帖子列表。也许我错过了一个窍门,这是可以通过其他方式实现的?

我见过一些涉及PHP的解决方案——我是一名开发人员,但不具备特定的PHP技能,我更喜欢不涉及编码的插件或技术。

1 个回复
SO网友:WebElaine

我能想到的唯一方法是在没有任何自定义编码的情况下实现这一点,如果您的主题已经显示了类别描述。编辑类别时,会有一个“描述”字段,用于放置静态信息。但是,许多主题不显示此信息。因此,如果您尝试在wp admin中添加一个类别描述,但它没有显示在类别前端,则需要创建一个子主题,这基本上意味着将一个非常简化的“style.css”文件添加到一个新文件夹中,将主题的“Category.php”复制到子主题文件夹中,然后在子主题中添加一个调用以显示该文件中的描述。

另一种方法是使用插件为每组帖子创建自定义帖子类型。例如,如果您的类别是苹果和香蕉,那么您将创建一个“苹果”CPT和一个“香蕉”CPT。确保将它们设置为非存档,并使用重写。“苹果”CPT需要重写array(\'slug\' => \'apples\') 因此,所有这些的URL都显示在URL的“下方”http://example.com/apples/.

这里是需要一些代码的部分。然后需要创建一个子主题,这很简单,只需在其中创建一个目录/wp-content/themes/ - 我们叫它吧/wp-content/themes/wpse/ - 创建一个名为style.css 在该文件夹中:

/*
Theme Name: WPSE Starter
Template: twentytwenty
*/
关键是,您需要将“Twenty20th”更改为实际使用的任何主题的文件夹名称。因此,如果您使用的是Ocean WP主题,则其文件夹名称(以及您需要放入文件中的名称)为“oceanwp”。根据您的站点需要进行调整。

现在,对于每个类别,您需要在主题中创建一个名为“page name.PHP”的PHP文件。虽然需要使用CPT名称,但不要使用“name”。因此,在我们的苹果示例中,您的文件名将是“page Apples.php”。复制您自己的主题页面。php文件内容并将其粘贴到此文件中。每个主题都使用它想要的任何HTML,因此您不能按原样使用此代码,您需要根据您的主题对其进行调整。但基本上,您需要实现的是:

<?php
// Get the sitewide header
get_header(); ?>
<main>
    <div class="static">
        <!-- Get the static content for this particular Page -->
        <?php if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            the_content();
        endwhile;
        endif; ?>
    </div>
    <div class="posts">
        <!-- Get a few of the posts in this particular CPT -->
        <?php
        $args = array(
            \'post_type\' => \'apple\',
            \'posts_per_page\' => 5,
        );
        $myposts = new WP_Query($args);
        // If any were found, output them
        if($myposts->have_posts()) {
            while($myposts->have_posts()) : $myposts->the_post();
                // You may be able to copy from your theme here
                // to output posts the same way your Categories do.
                // This will make an HTML article with just the
                // title of each post as a link to the full post.
                echo \'<article><a href="\' . get_the_permalink() . \'">\';
                the_title();
                echo \'</a></article>\';
            endwhile;
        }
        ?>
    </div>
</main>
<?php
// Get the sitewide footer
get_footer(); ?>
第三种方法是使用常规帖子,即使用自定义字段插件,如ACF。使用这种方法,您可以创建帖子并将其分配给类别,然后为每个类别创建一个ACF字段集,该字段集就是您实际输入数据的地方。但是,您仍然需要创建一个子主题才能实际显示此信息,并且它与使用WP的内置类别描述相比没有任何优势,除非您有结构化数据。

相关推荐

在Elementor‘Posts Widget’中显示当前和未来的帖子

根据Elementor文件https://developers.elementor.com/custom-query-filter/#Multiple_Post_Types_in_Posts_Widget我需要显示未来的帖子,包括今天的帖子。我们想显示摇滚乐队所在的地点和日期(我们不想显示日期早于今天的帖子)我正在使用此代码:add_action( \'elementor/query/my_custom_filter\', function( $query ) { $meta_qu