定义自定义帖子类型的默认页面

时间:2013-02-01 作者:Tathiana

假设我创建了一个名为“new projects”的自定义post类型,其功能类型为page,slug为“projects”。

假设我创建了一个类型为“new projects”的新页面,并将其命名为“my new project”。默认情况下,URL将表示为:

我的网站。com/项目/我的新项目/

但是,如果我想要这个页面my-new-project 作为该自定义帖子类型的默认页面(如索引),是否可能?换句话说,我希望我的网站。com/projects/to加载my-new-project

如果这是可能的,那么我是否可以添加更多类型为“new projects”的页面,并仍然将其中一个页面定义为“default”页面?

太谢谢你了,塔奇亚纳

3 个回复
SO网友:Milo

在使用pre_get_posts 措施:

function wpa84126_single_project_archive( $query ){
    if( ! is_admin()
        && $query->is_main_query()
        && $query->is_post_type_archive( \'new_projects\' ) )
            $query->set( \'name\', \'my-new-project\' );
}
add_action( \'pre_get_posts\', \'wpa84126_single_project_archive\' );
确保更改new_projects 到您已在其下注册帖子类型的实际名称。它仍然会在各个方面表现得像是存档页面,但只会查询单个帖子。您可以将slug保存在一个选项中,这样就可以更改它,而无需编辑代码。

SO网友:Christian Rios

我不确定我是否完全遵循和/或这是否是最好的解决方法。。。但是您可以尝试创建一个页面模板,(一个“普通”页面),并且在代码中,您可以修改查询以只拉入特定的CPT。

创建新的页面模板文件,page-new-projects.php.

确保相应地正确命名模板(这是一个示例):

<?php 
/*
 Template Name: New Projects
*/
?>
改变page-new-projects.php 仅包括\'post_type\'=> \'new-projects\' (NOTE: 自定义帖子类型不能包含空格,这就是为什么我添加了-)

在WordPress中创建一个标题为“项目”的新页面,并确保选择New Projects 页面模板(或步骤2中传递的任何名称)。

无可否认,当你问我是否可以添加更多类型为“新项目”的页面,并且仍然将其中一个定义为默认页面时,你会失去我的理解,但也许上面的页面模板可以帮助你了解你最终想要做什么。

例如,我设想循环以以下方式运行:

//set the arguments to pass into WP_Query
$args = array(\'post_type\'=>\'new-projects\');  //This is assuming \'new-projects\' is the custom post type
$query = new WP_Query( $args );

// The Loop
while ( $query->have_posts() ) : $query->the_post();
    //do whatever you want to do within the loop
endwhile;
再一次,也许有更好的方法来解决这个问题。。。

参考文献:

(1)http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

(2)http://codex.wordpress.org/Class_Reference/WP_Query

SO网友:Tim

你完全可以在WP中做到这一点——这与拥有一个显示单个最新帖子的博客索引页面没有什么不同,除非在这种情况下,你可能希望“新项目”索引页面上显示的内容是一个特定的帖子ID,在你告诉它更改之前不会更改,而不是在发布新帖子时更改。有几种方法可以做到这一点,但您可能必须通过特殊/唯一的类别、标记或自定义字段手动标记“特色”帖子(即您希望显示在/项目/页面上的帖子)。自定义帖子类型与常规博客帖子没有什么不同,您只是使用一个显示特定帖子类型的自定义页面模板。您还可以将要发布的帖子的帖子ID硬编码到“新项目”索引模板(即输出URL/projects/的模板)中,然后在您想要更改特色帖子时插入新的帖子ID。这取决于你如何约束哪些内容具有特色,以及你希望它的具体程度(例如,可能你的特色文章显示在/项目/上,是你“新项目”自定义文章类型中最近添加的项目,然后它的功能与显示单个最新博客文章的功能完全相同)。

如果不想为自定义帖子类型创建索引模板,可以修改。htaccess重写/projects/to指向/projects/my new project的URL/(不过,每次您想指向其他帖子时,都必须手动更改此URL)。根据您的服务器设置,您的里程数可能会有所不同,但首先:

<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^projects/$ projects/my-new-project/ [L]
</ifmodule>

结束

相关推荐