具有使用自定义分类的自定义帖子类型的自定义固定链接结构

时间:2017-08-23 作者:Clinton Dixson

经过一番彻底的搜索,我被难住了。

我有一个Wordpress自定义帖子类型,名为:listings。列表具有称为服务和区域的分类法。

默认结构为

/listing/%post-name%

我正在尝试实现一个如下结构:

/%services%/%areas%/%post-name%

我能够使用插件实现一些接近的功能Custom Post Type Permalinks 这为我提供了以下工作URL:

/listings/%services%/%areas%/%post-name%

然后使用代码

function gp_remove_cpt_slug( $post_link, $post, $leavename ) {

    if ( \'listing\' != $post->post_type || \'publish\' != $post->post_status ) {
        return $post_link;
    }

    $post_link = str_replace( \'/\' . $post->post_type . \'/\', \'/\', $post_link );

    return $post_link;
}
add_filter( \'post_type_link\', \'gp_remove_cpt_slug\', 10, 3 );
当我编辑列表时,这显示了我想要的内容的永久链接,但当我转到该URL时,出现了404错误。我不知道接下来该怎么办。请帮忙。

1 个回复
SO网友:Abhik

一个简单的解决方案是使用rewrite\'with_front 注册post类型时的参数。试试这个。。

\'with_front\' => false,
\'rewrite\' => array( \'slug\' => \'%services%/%areas%\'),
然后将过滤器添加到post_type_link 用术语替换标记。

function wpse277778_rewrite_urls( $url, $post ) {

   if ( \'listings\' == get_post_type( $post ) ) {
        $services = wp_get_post_terms( $post->ID, \'services\' );
        $areas = wp_get_post_terms( $post->ID, \'areas\' );

        $url = str_replace( \'%services%\', $services[0]->slug, $url );
        $url = str_replace( \'%areas%\', $areas[0]->slug, $url );


    }
    return $url;
}
add_filter( \'post_type_link\', \'wpse277778_rewrite_urls\', 10, 2 );
请注意,这是一个基本代码,您需要使用条件标记进行一些检查,以无错误地输出$url. 此外,如果没有相关术语,您应该设置默认服务和区域。

结束

相关推荐