如何在永久链接中将元值附加到自定义帖子类型?
我有像www.abc.com
这样的网址
以及帖子标题,我想添加两个元值,即日期为年/月&自定义类型的公司名称永久链接。
所以,我期待的最终永久链接是这样的:
www.abc.com/2018/04/best-car-this-year-Honda
在此之前尝试了许多链接,没有一个完美无缺。
add_action('init', 'Theme2035_detail_register');
//Registering new custom post type - Detail
function Theme2035_detail_register() {
$ldate ='/'; // to remove post type from permalink
$labels = array(
'add_new' => __('Add New Detail', 'espresso'),
'name' => __('Detail','espresso'),
'singular_name' => __('Detail', 'espresso'),
'add_new_item' => __('Add New Detail', 'espresso'),
'edit_item' => __('Edit Detail Item', 'espresso'),
'new_item' => __('New Detail', 'espresso'),
'view_item' => __('View Detail', 'espresso'),
'search_items' => __('Search Detail', 'espresso'),
'not_found' => __('No Detail have been added yet', 'espresso'),
'not_found_in_trash' => __('Nothing found in Trash', 'espresso'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => false,
'rewrite' => array( 'slug' => $ldate, 'with_front' => false ),
'supports' => array('title', 'editor','thumbnail','comments'),
'has_archive' => true,
'taxonomies' => array('post_tag'),
'menu_icon' => 'dashicons-format-office',
);
register_post_type( 'detail' , $args );
}
我的帖子标题是今年最好的车,所以在这里你可以看到我的默认自定义页面网址是这样的:
www.abc.com/best-car-this-year
我想要获得的是在永久链接中的自定义帖子标题之前添加日期,并在永久链接之后添加品牌名称。它看起来像这样:
www.abc.com/2018/04/best-car-this-year_HONDA
日期可以在日期添加,品牌名称将从后元表中提取。
答案 0 :(得分:1)
有很多解决方案,可以根据需要用于构建网址结构。以下是获取www.abc.com/2018/04/best-car-this-year_HONDA
add_action('init', 'Theme2035_detail_register');
function Theme2035_detail_register() {
$ldate ='/%detail_year%/%detail_monthnum%';
$labels = array(
'add_new' => __('Add New Detail', 'espresso'),
'name' => __('Detail','espresso'),
'singular_name' => __('Detail', 'espresso'),
'add_new_item' => __('Add New Detail', 'espresso'),
'edit_item' => __('Edit Detail Item', 'espresso'),
'new_item' => __('New Detail', 'espresso'),
'view_item' => __('View Detail', 'espresso'),
'search_items' => __('Search Detail', 'espresso'),
'not_found' => __('No Detail have been added yet', 'espresso'),
'not_found_in_trash' => __('Nothing found in Trash', 'espresso'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => false,
'rewrite' => array( 'slug' => $ldate, 'with_front' => false),
'supports' => array('title', 'editor','thumbnail','comments'),
'has_archive' => true,
'taxonomies' => array('post_tag'),
'menu_icon' => 'dashicons-format-office',
);
register_post_type( 'detail' , $args );
}
add_filter('post_type_link', 'ww_construct_permalink', 1, 2);
function ww_construct_permalink( $permalink, $post ){
$year_mask = '%detail_year%';
$month_mask = '%detail_monthnum%';
if( strpos($permalink, $year_mask) === false && strpos($permalink, $month_mask) === false ) {
return $permalink;
}
$year = date("Y", strtotime($post->post_date));
$month = date("m", strtotime($post->post_date));
return str_replace([$year_mask,$month_mask], [$year, $month], $permalink );
}
我们的步骤:
$ldate
我们定义为/%detail_year%/%detail_monthnum%
,而不是我们可以使用%anything%
之类的内容。但是我们需要确保它不会被其他一些插件/主题覆盖,这些插件/主题可能会使用相同的变体。post_type_link
过滤器来创建我们想要的网址,在检查$year_mask
和$month_mask
以确定帖子类型是我们创建后,我们获取创建日期我们的帖子来自WP_Post object
并返回我们想要的网址结构。注意:可能需要打开Dashboard -> Permalinks -> Save
(不更改内容)来刷新固定链接。
答案 1 :(得分:0)
您可以尝试使用以下代码。
add_filter( 'register_post_type_args', 'cpt_permalink_change', 10, 2 );
function cpt_permalink_change( $args, $post_type )
{
$args['rewrite']['slug'] = 'your permalink';
return $args;
}//end of function
希望这对你有用。