为插件使用的自定义POST类型重写‘重写’插件

时间:2015-05-15 作者:mathiregister

快速提问:我正在使用一个插件来创建一个带有重写段塞/项目的自定义帖子类型/

所以myurl.com/projects/single-project

我想重写“项目/使用”

\'rewrite\' => array(\'slug\'=>\'\'),

有没有钩子或什么东西可以让我钩住register_post_type() 外部插件的功能?

我希望在我的函数中发生这种重写。php,并且仅当此插件被激活时。我知道自定义帖子类型“ignition\\u product”的名称

你好Matt

更新

function modify_ign_projects() {
    if ( post_type_exists( \'ignition_product\' ) ) {

        global $wp_post_types, $wp_rewrite;
        $wp_post_types[\'ignition_product\']->hierarchical = true;
        $args = $wp_post_types[\'ignition_product\'];
        //print_r( $args ); // [rewrite] => Array ( [slug] => projects
        $wp_rewrite->add_rewrite_tag("%spendenprojekte%", \'(.+?)\', "projects");
        add_post_type_support(\'ignition_product\',\'page-attributes\');
    }
}
add_action( \'init\', \'modify_ign_projects\', 100 );

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

我在帖子类型注册流中到处搜索,但没有找到正确的方法(使用过滤器或操作)。

您可以使用不同的slug(我更喜欢)再次注册post类型,或者只运行WordPress运行的代码行来构建register\\u post\\u type中的重写规则。

我用slug注册了这个帖子类型book 并用这个技巧改变了它。我不确定它是否100%正确(因为我正在为相同的帖子类型重写规则),但它确实有效。

add_action(\'registered_post_type\', \'testbook\', 10, 2);
function testbook($post_type, $args) {
    global $wp_rewrite;
    if ($post_type == \'book\') {

        $args->rewrite[\'slug\'] = \'changed_slug_book\'; //write your new slug here

        if ( $args->has_archive ) {
                $archive_slug = $args->has_archive === true ? $args->rewrite[\'slug\'] : $args->has_archive;
                if ( $args->rewrite[\'with_front\'] )
                        $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
                else
                        $archive_slug = $wp_rewrite->root . $archive_slug;

                add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", \'top\' );
                if ( $args->rewrite[\'feeds\'] && $wp_rewrite->feeds ) {
                        $feeds = \'(\' . trim( implode( \'|\', $wp_rewrite->feeds ) ) . \')\';
                        add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . \'&feed=$matches[1]\', \'top\' );
                        add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . \'&feed=$matches[1]\', \'top\' );
                }
                if ( $args->rewrite[\'pages\'] )
                        add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . \'&paged=$matches[1]\', \'top\' );
        }

        $permastruct_args = $args->rewrite;
        $permastruct_args[\'feed\'] = $permastruct_args[\'feeds\'];
        add_permastruct( $post_type, "{$args->rewrite[\'slug\']}/%$post_type%", $permastruct_args );
    }
}

SO网友:Page Carbajal

您是否随时调用flush\\u rewrite\\u规则?

如果要更改自定义post类型的slug,还必须调用flush\\u rewrite\\u规则。

您可以在此处找到更多文档Setting up custom post type archives in WP3.1? Any luck?

还有这里https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

结束

相关推荐

在加载plugins_后,get_plugins()不工作

知道为什么下面的代码function my_plugin_load() { get_plugins(); } add_action( \'plugins_loaded\', \'my_plugin_load\' ); 抛出此错误?Fatal error: 不应调用未定义的函数get\\u plugins()get_plugins() 定义在plugins_loaded 胡克开火了?如果不是,那么什么才是合适的钩子呢?(这个钩子应该启动插件的引导/加载过程)