如何更改自定义帖子类型的参数

时间:2018-12-19 作者:pressword

我有一个插件,可以创建自定义的帖子类型。然而,它不会创建存档或使单个帖子可见,我想对此进行更改。

这是注册帖子类型的代码:

private static function init_taxonomy() {

    $show_in_menu = current_user_can( \'manage_woocommerce\' ) ? \'woocommerce\' : $show_in_menu = true;

    register_post_type( \'wc_product_retailer\',
        array(
            \'labels\'                  => array(
                \'name\'                => __( \'Retailers\', \'woocommerce-product-retailers\' ),
                \'singular_name\'       => __( \'Retailer\', \'woocommerce-product-retailers\' ),
                \'menu_name\'           => _x( \'Retailers\', \'Admin menu name\', \'woocommerce-product-retailers\' ),
                \'add_new\'             => __( \'Add Retailer\', \'woocommerce-product-retailers\' ),
                \'add_new_item\'        => __( \'Add New Retailer\', \'woocommerce-product-retailers\' ),
                \'edit\'                => __( \'Edit\', \'woocommerce-product-retailers\' ),
                \'edit_item\'           => __( \'Edit Retailer\', \'woocommerce-product-retailers\' ),
                \'new_item\'            => __( \'New Retailer\', \'woocommerce-product-retailers\' ),
                \'view\'                => __( \'View Retailers\', \'woocommerce-product-retailers\' ),
                \'view_item\'           => __( \'View Retailer\', \'woocommerce-product-retailers\' ),
                \'search_items\'        => __( \'Search Retailers\', \'woocommerce-product-retailers\' ),
                \'not_found\'           => __( \'No Retailers found\', \'woocommerce-product-retailers\' ),
                \'not_found_in_trash\'  => __( \'No Retailers found in trash\', \'woocommerce-product-retailers\' ),
            ),
            \'description\'             => __( \'This is where you can add new product retailers that you can add to products.\', \'woocommerce-product-retailers\' ),
            \'public\'                  => true,
            \'show_ui\'                 => true,
            \'capability_type\'         => \'post\',
            \'capabilities\'            => array(
                \'publish_posts\'       => \'manage_woocommerce_product_retailers\',
                \'edit_posts\'          => \'manage_woocommerce_product_retailers\',
                \'edit_others_posts\'   => \'manage_woocommerce_product_retailers\',
                \'delete_posts\'        => \'manage_woocommerce_product_retailers\',
                \'delete_others_posts\' => \'manage_woocommerce_product_retailers\',
                \'read_private_posts\'  => \'manage_woocommerce_product_retailers\',
                \'edit_post\'           => \'manage_woocommerce_product_retailers\',
                \'delete_post\'         => \'manage_woocommerce_product_retailers\',
                \'read_post\'           => \'manage_woocommerce_product_retailers\',
            ),
            \'publicly_queryable\'      => true,
            \'exclude_from_search\'     => true,
            \'show_in_menu\'            => $show_in_menu,
            \'hierarchical\'            => false,
            \'rewrite\'                 => false,
            \'query_var\'               => false,
            \'supports\'                => array( \'title\' ),
            \'show_in_nav_menus\'       => false,
        )
    );
}
这是我在函数中使用的代码。我的孩子主题的php。

function change_post_types_slug( $args, $post_type ) {

   /*item post type slug*/   
   if ( \'wc_product_retailer\' === $post_type ) {
      $args[\'has_archive\'] = true;
   }

   return $args;
}
add_filter( \'register_post_type_args\', \'change_post_types_slug\', 10, 2 );
这不会改变任何事情。

此外,我还尝试通过添加

\'has_archive\'  => true,
下方

\'show_in_nav_menus\'       => false, 
然后甚至改变

show_in_nav_menusquery_vars 为真。

背景rewrite “我的酷零售商”。

所有这些更改我都转到peramlinks设置并点击save。我甚至禁用了插件并重新启用了它。

此外,在post edit屏幕上,标题下仍不显示post slug。

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

首先query_var 必须是true 或者一个字符串,如果您想让任何类型的前端显示工作,无论您是否使用非常永久的链接。

第二部分是rewrite 必须至少是true. 请注意rewrite 是布尔真/假或数组。这是:

$args[\'rewrite\'] = \'my-cool-retailer\';
。。。将启用重写,但不会将slug设置为my-cool-retailer, 因为字符串在这里不是有效值,所以它只会被解释为true, 你的鼻涕虫就会wc_product_retailer.

如果要设置不同的段塞,则需要rewrite 具有键的数组slug:

$args[\'rewrite\'][\'slug\'] = \'my-cool-retailer\';
至于has_archive, 那是true 默认情况下,这样做不会更改任何内容,但query_var. 如果您想要的不是wc_product_retailer 成为档案管理员。

因此,当我在默认安装上进行测试时,使用第一个代码块,然后在过滤器中设置这两个值对我很有用:

function change_post_types_slug( $args, $post_type ) {
    if ( \'wc_product_retailer\' === $post_type ) {
        $args[\'query_var\'] = true;
        $args[\'rewrite\'][\'slug\'] = \'my-cool-retailer\';
   }
   return $args;
}
add_filter( \'register_post_type_args\', \'change_post_types_slug\', 10, 2 );
你可能还想补充一件事with_front, 这是true 默认情况下。这将添加来自post 永久链接到您的CPT,这通常是不可取的。

$args[\'rewrite\'][\'with_front\'] = false;

相关推荐