在Wordpress中更改父主题中的自定义postType属性

问题描述:

我正在为一个令人兴奋的WordPress主题构建一个childtheme。 父主题创建一个自定义帖子类型,该类型具有我想摆脱的属性“rewrite”属性。在Wordpress中更改父主题中的自定义postType属性

'rewrite' \t => array(
 
\t 'slug' => 'project' 
 
)
我发现这是可以改变/上excisting定制文章类型这样的添加分类: register_taxonomy_for_object_type( '类', 'CUSTOM_POST_NAME');

但是它可以改变这(和其他)属性?

这里的关键是拨打register_post_type。这实际上是在WordPress中注册帖子类型。

docs中,我们看到该函数在/wp-includes/post.php中定义。我们也可以看到该函数的完整源代码,非常方便。

在函数的源代码中,我们可以看到只有一个do_action(),并且在帖子类型完全注册后调用。

所以,下一个要看的地方是在WP_Post_Type类。我们可以再次扩展完整的源代码(或者您可以通过您最喜爱的文本/代码编辑器查看源代码)。首先要看的是该课程的__construct()方法。目前这(WordPress的4.8)由以下部分组成:

public function __construct($post_type, $args = array()) { 
    $this->name = $post_type; 

    $this->set_props($args); 
} 

所以,你可以看到,该名被分配到$this->name,然后方法set_props()被调用传递$args(这是送的参数数组。到register_post_type()

看看下一个合乎逻辑的地方是set_props()方法的内部,在相当多的是方法的最顶部是下面的代码:

/** 
    * Filters the arguments for registering a post type. 
    * 
    * @since 4.4.0 
    * 
    * @param array $args  Array of arguments for registering a post type. 
    * @param string $post_type Post type key. 
    */ 
    $args = apply_filters('register_post_type_args', $args, $this->name); 

宾果!传递的$args在用于初始化帖子类型之前先通过register_post_type_args过滤器。

所以现在,拼图的最后一块是创建自己的功能,将其连接到register_post_type_args过滤器,确保你改变的是正确信息类型,你可以*地做任何你想要与该职位类型。下面是一个示例代码,以帮助你:

function my_filter_register_post_type_args($args, $post_type) { 
    // We only want to edit the 'CUSTOM_POST_NAME' post type - if that's not it, then bail 
    if ('CUSTOM_POST_NAME' != $post_type) { 
     return $args; 
    } 

    $args['rewrite'] = false; 

    return $args; 
} 
add_filter('register_post_type_args', 'my_filter_register_post_type_args', 10, 2); 

我希望这将帮助你和其他人那里看到它可以是多么容易潜入的WordPress的源代码(你甚至可以做到这一点从你的浏览器现在:)),以找出一些可能并不总是只是搜索了。通过一些批判性思维,你可以按照面包屑路径来找出调整某事的最佳方式。