自定义文章类型固定链接可设置两形式,分别为 ID 和别名,笔者认为使用别名的方式再加适合 SEO,不过两种方式代码都已经放上。很多主题也会有两种或两种以上的自定义类型文章,为文章类型添加一个数组就可以,这样不论多少种自定义文章类型都适合。
自定义文章类型固定链接:别名形式
- $posttypes = array(
- 'product' => 'product',//WooCommerce 产品自定义文章类型
- 'portfolio' => 'portfolio'//作品集自定义文章类型
- );
- add_filter('post_type_link', 'custom_book_link', 1, 3);
- function custom_book_link( $link, $post = 0 ){
- global $posttypes;
- if ( in_array( $post->post_type,array_keys($posttypes) ) ){
- return home_url( $posttypes[$post->post_type].'/' . $post->post_name .'.html' );
- } else {
- return $link;
- }
- }
- add_action( 'init', 'custom_book_rewrites_init' );
- function custom_book_rewrites_init(){
- global $posttypes;
- foreach( $posttypes as $k => $v ) {
- add_rewrite_rule(
- $v.'/([一-龥 a-zA-Z0-9_-]+)?.html([sS]*)?$',
- 'index.php?post_type='.$k.'&name=$matches[1]',
- 'top' );
- }
- }
自定义文章类型固定链接:ID 形式
- $posttypes = array(
- 'product' => 'product',//WooCommerce 产品自定义文章类型
- 'portfolio' => 'portfolio'//作品集自定义文章类型
- );
- add_filter('post_type_link', 'custom_book_link', 1, 3);
- function custom_book_link( $link, $post = 0 ){
- global $posttypes;
- if ( in_array( $post->post_type,array_keys($posttypes) ) ){
- return home_url( $posttypes[$post->post_type].'/' . $post->ID .'.html' );
- } else {
- return $link;
- }
- }
- add_action( 'init', 'custom_book_rewrites_init' );
- function custom_book_rewrites_init(){
- global $posttypes;
- foreach( $posttypes as $k => $v ) {
- add_rewrite_rule(
- $v.'/([0-9]+)?.html$',
- 'index.php?post_type='.$k.'&p=$matches[1]',
- 'top' );
- }
- }
两种形式的固定链接代码也只是设置了显示方式以及显示的内容,ID 就显示 0-9 其中的数字,别名就显示所有的字符。
使用固定链接后,主题中集成的作品集文章类型在文章页面获取作品集分类名称和 SEO 中获取产品关键字时获取不了,不使用固定是正常,所以 Google 找到应对方案。
1 、作品集文章页面获取分类名称,添加到作品集文章页面中
- <!--获取作品集分类名称-->
- <?php
- $terms = get_the_terms($post->ID, 'portfolio_field' );//portfolio_field 为作品集分类法
- if ($terms && ! is_wp_error($terms)) :
- $term_names_arr = array();
- foreach ($terms as $term) {
- $term_names_arr[] = $term->name;
- }
- $terms_name_str = join( ",", $term_names_arr);
- endif;
- ?>
- <!--获取作品集分类名称 end-->
2 、使用以下代码来调用分类名称
- <?php echo $terms_name_str; ?>
通过上面的代码我们可以获取 portfolio_field 的分类名称,获取产品关键字名称也同样适用,将上面代码中的 portfolio_field 修改为 product_tag 即可。
设置好自定义文章类型的固定链接,看着确实很舒服,也有利于 SEO,同时也解决设置固定链接后与其它代码产生的冲突。