如何创建没有分类名称的自定义分类URL?

时间:2013-03-28 作者:Condalator

我有一个网站,列出了不同城市的企业(这是一个利基网站,所以所有企业都有相同的“分类”)。

首先,我为位置创建了一个CPT,并创建了一个名为“城市”的分类法,其中有150个左右的城市作为术语。

所有300多个地点都标记了一个城市。

我能够修改CPT链接,使它们看起来像这样:示例。com/cityname/business name

我很想拥有(但目前还无法实现)像这样的URL示例。com/cityname,列出该城市的所有企业。

我的理解是,默认情况下,WP会尝试查找名称为“cityname”的页面。

将此请求重新路由到使用分类法模板的最简单方法是什么?或者,另一种选择是,最简单的方法是让页面模板检测城市名称并将帖子标记为该分类术语?

我想我可以在htaccess中为所有城市创建重写规则,但我更喜欢在分类法中添加新城市名称时自动添加重定向的位置。

1 个回复
SO网友:Manny Fleurmond

下面是一些可以实现此目的的代码:

//Creates special permastruct that turns all terms of cities into slugs
add_action( \'init\', \'set_rewrite\' );

function set_rewrite() {
    //Get terms
    $terms = get_terms( \'cities\', array( \'hide_empty\' => false ) );
    //return if no terms
    if( count( $terms ) < 1 ) return;
    $slugs = wp_list_pluck( $terms, \'slug\' );
    //create term regex
    $termregex = \'(\' . implode( \'|\', $slugs) . \')\';
    //New query var
    add_rewrite_tag( \'%cityname%\', $termregex );
    //Add permastruct
    add_permastruct( \'cities_struct\', \'%cityname%/\' );
    //refresh if new term added
    if( get_option( \'update_cities_struct\' ) ) {
        global $wp_rewrite;
        $wp_rewrite -> flush_rules();
        update_option( \'update_cities_struct\', 0 );
    }
}

//action to refresh rewrite rules when a new term is saved
add_action( \'created_cities\', \'refresh_cities\' );
add_action( \'edited_cities\', \'refresh_cities\' );
add_action( \'delete_cities\', \'refresh_cities\' );


function refresh_cities() {
    update_option( \'update_cities_struct\', 1 );
}

//set city name to the taxonomy cities
add_filter( \'parse_query\', \'parse_cities_query\' );

function parse_cities_query( $query ) {
    if( !empty( $query->query_vars[\'cityname\'] ) ) $query->set( \'cities\', $query->query_vars[\'cityname\'] )
}   
基本上,这创建了一个特殊的permastruct,它使用分类法的slugcities 作为其基础。它创建一个名为cityname, 它只接受分类法的slug,然后将结果发送到适当的分类法查询变量。

结束

相关推荐

hide wp-content from urls

下面是我想从页面源中包含的文件的URL中隐藏wp内容的想法。在wp设置中定义以下内容。phpdefine (\'WP_CONTENT_URL\',\'http://example.com/myownfoldername\'); 并将此添加到.htaccessRewriteRule ^myownfoldername/(.*) /wp-content/$1 [QSA,L] 在localhost上没有其他插件的情况下,这似乎可以很好地工作,但在只有几个插件的在线站点上,它可以无缝地工作。我更