首先,我们需要申报CPT。
在此示例中,我使用名称“创建”command“。
此外,我还为这个CPT添加了类别和标记支持。
CPT将是公共的,可搜索的,将有存档页、提要页等。
add_action( \'init\', \'create_post_type\' );
function create_post_type() {
$post_array = array(
\'name\' => __( \'Command\' ),
\'singular_name\' => __( \'command\' )
);
$post_args = array(
\'labels\' => $post_array,
\'menu_name\' => __( \'Command\' ),
\'taxonomies\' => array(\'category\',\'post_tag\'),
\'public\' => true,
\'has_archive\' => true,
\'rewrite\' => array(\'slug\' => \'command\'),
\'publicly_queryable\' => true,
\'exclude_from_scratch\' =>false,
\'with_front\' => true,
\'feeds\' => true,
\'supports\' => array( \'title\',\'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\',\'revisions\' ),
);
register_post_type( \'command\',$post_args);
}
现在,我声明重写规则为CPT类别和标记提供单独的URL功能。
http://domain.net/command/category/catname
http://domain.net/command/tag/tagname
将转换为wordpress可以理解的以下URL。
http://domain.net/?page_type=command&category_name=catname
http://domain.net/?page_type=command&tag=tagname
以便wordpress能够理解它们。
add_action(\'init\', \'category_cpt_rewrites\');
function category_cpt_rewrites() {
$custom_post_types = array(\'command\'); //some example post types
foreach ( $custom_post_types as $post_type ) {
$rule = \'^\' . $post_type . \'/category/(.+?)/?$\';
$rewrite = \'index.php?post_type=\' . $post_type . \'&category_name=$matches[1]\';
add_rewrite_rule($rule,$rewrite,\'top\');
}
foreach ( $custom_post_types as $post_type ) {
$rule = \'^\' . $post_type . \'/tag/(.+?)/?$\';
$rewrite = \'index.php?post_type=\' . $post_type . \'&tag=$matches[1]\';
add_rewrite_rule($rule,$rewrite,\'top\');
}
}
我们还将重写这样基于日期的归档页面。
http://example.net/command/2016/05
将转换为
http://example.net/?post_type=command&m=201605
代码如下所示。
add_action(\'init\', \'date_cpt_rewrites\');
function date_cpt_rewrites() {
$custom_post_types = array(\'command\'); //some example post types
foreach ( $custom_post_types as $post_type ) {
$rule = \'^\' . $post_type . \'/(\\d+)/(\\d+)/?$\';
$rewrite = \'index.php?post_type=\' . $post_type . \'&m=$matches[1]$matches[2]\';
add_rewrite_rule($rule,$rewrite,\'top\');
}
}
在这里,我们要确保我们的CPT”
command“帖子也可以在其他公共存档中使用。默认情况下,帖子类型“post”仅显示在存档页面上。
add_filter( \'pre_get_posts\', \'my_get_posts\' );
function my_get_posts( $query ) {
if ( is_category() || is_tag() || is_search() || is_home() || is_front_page() || is_author() || is_archive() && $query->is_main_query() )
$post_type = get_query_var(\'post_type\');
if($post_type) {
$post_type = $post_type;
}else{
$post_type = array(\'post\',\'command\'); // replace cpt to your custom post type
$query->set( \'post_type\', $post_type );
}
return $query;
}
所以在这里,整个游戏就是将您想要的URL转换为wordpress可理解的URL。