Change Custom Post Type slug

时间:2016-11-24 作者:Darren Bachan

我在一个子主题中工作,所以我不想编辑正在向我的网站注册公文包CPT的文件。我使用了一个插件将名称从公文包改为故事,但该插件没有为slug提供选项。

我尝试使用以下函数:

function change_slug_of_post_type_portfolio() {
    register_post_type(\'portfolio\', array(\'rewrite\' => array (\'slug\' => \'stories\',)));
}
add_action(\'init\', \'change_slug_of_post_type_portfolio\', 20);
但它完全从WordPress管理侧栏中删除了公文包。

2 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

这个register_post_type_args 筛选器可用于修改post类型参数:

add_filter( \'register_post_type_args\', \'wpse247328_register_post_type_args\', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {

    if ( \'portfolio\' === $post_type ) {
        $args[\'rewrite\'][\'slug\'] = \'stories\';
    }

    return $args;
}

SO网友:Felipe Romero

@戴夫·罗姆西(DaveRomsey)的回答对我不起作用,PHP一直告诉我Warning: Cannot use a scalar value as an array in /path/to/functions.php所以我去了array_merge 方法

完成您需要添加到孩子主题的功能functions.php 文件:

function update_portfolios_slug( $args, $post_type ) {

    if ( \'portfolios\' === $post_type ) {

        //$args[\'rewrite\'][\'slug\'] = \'presidentes\';

        $my_args = array(
            \'rewrite\' => array( \'slug\' => \'presidentes\', \'with_front\' => false )
        );

        return array_merge( $args, $my_args );
    }

    return $args;
}

add_filter( \'register_post_type_args\', \'update_portfolios_slug\', 10, 2 );
上传代码后,不要忘记通过访问“刷新”永久链接Settings > Permalinks 并点击保存更改。

干杯

相关推荐