在最基本的层面上,您可以通过简单地从显示“登录页”的模板中删除循环来阻止显示所有帖子如果你只想modify 显示在“登录页”上的帖子(例如,如果您将Wordpress post对象用作歌曲并尝试显示歌曲集),则应使用[pre_get_posts][1]
改为操作。使用这个钩子修改查询超出了我的解决方案的范围,但我提供了一个使用钩子防止帖子显示在页面下方的示例。
WARNING: 直接更改第三方主题可能很危险,因为如果有人决定将主题更新为原始主题作者提供的新版本,下载的新文件将覆盖用户所做的任何更改。为了解决这个问题,Wordpress使用了一个名为child themes,“它允许您指定一个预先存在的主题作为子主题的“基础”,并根据其进行排序。我强烈建议您在开始进行修改之前创建一个子主题或复制211,并在下面的步骤#1中详细介绍了该过程,Removing the Loop via Template Modifications 在下面
正在删除循环
通过模板修改删除循环,因此我们开始了创建/修改模板文件的旅程。由于我不知道你知道什么,也不知道到目前为止你做了什么,我已经写了相当一般的说明,希望能看到你朝着完成任务更近一些。
无论如何,从顶部:
创建一个新主题(此后称为居住在wp-content/themes/mythemename
) 如果您尚未这样做,请执行以下操作之一:
a) 正在复制twentyeleven
目录位于/wp-content/themes
并对其进行重命名,另外更新mythemename/style.css
(顶部封闭在/* ... */
). 至少指定主题的Theme Name
参数在这种情况下,您也应该离开Text Domain
设置为twentyeleven
.
b) 创建child theme Wordpress的2011主题。为此,请在中创建一个新目录wp-content/themes
并在其中创建style.css
包含一个标头的文件,该标头指定(至少)一个Theme Name
参数此外,在位于mythemename/style.css
, 设置参数Template
到twentyeleven
- 这告诉Wordpress使用211作为子主题的基础。在结束时*/
在主题标题中添加行,@import url("../twentyeleven/style.css");
- 这将把所有的211的CSS都引入到你的新主题中。对主题CSS的任何修改都应该在这条新线下进行。
有关主题开发的详细信息,请参阅the
codex page on the subject.
下一步是参考Template Hierarchy 要了解Wordpress试图加载哪个页面模板作为“登录页”遵循路径(“What Page?“>”Site Front Page)在其各个终端的图表上,我们可以看到有许多选项可用:
a) 创造wp-content/themes/front-page.php
, 在考虑博客的“阅读”设置之前,Wordpress将加载哪些内容。NOTE: “二十一”主题没有定义此文件。
b) 创造wp-content/themes/home.php
, 如果否,将加载哪个Wordpressfront-page.php
模板可用,博客的“阅读”设置设置为在主页上显示帖子。
c) 创造wp-content/themes/page-{PageSlug}.php
(更换{PageSlug}
如果没有,Wordpress将加载哪个页面front-page.php
模板可用,博客的“阅读”设置被设置为显示静态首页,这表明静态首页具有{PageSlug}
.
d) 创造wp-content/themes/{CustomTemplateName}.php
并利用custom page templates, 这超出了我的解决方案的范围。
作为新模板文件的基础(无论您在接下来的步骤2中创建了什么文件),请随意复制wp-content/themes/twentyeleven/index.php
. 在与您的特定问题实际相关的第一个操作中,您可以删除页面上显示的任何和所有帖子,只需删除整个循环,即删除(包括)之间的所有内容if( have_posts() )
和endif;
.
通过pre_get_posts
行动The action 在Wordpress查询帖子之前立即执行。通过测试是否显示的是首页,我们可以有条件地丢弃查询,这样它就不会返回任何帖子供循环显示(您可能会得到一条详细说明没有帖子的消息)。将以下内容放入主题functions.php
文件(wp-content/themes/mythemename/functions.php
如果您碰巧遵循了上一节中的步骤#1):
function prevent_frontpage_posts( $query ) {
if( ( is_front_page() || is_home() ) && $query->is_main_query() )
$query->init(); //If processing the main query on the main page, reset it.
//HACK: Modify the query to search for something bogus to ensure that the default values don\'t provide a result set.
$query->set( \'post_type\', \'dummyPostType\' );
}
add_action( \'pre_get_posts\', \'prevent_frontpage_posts\' );
希望这有帮助。感谢您让我使用您的问题来更加熟悉StackExchange标记;)