在Wordpress中更改父主题中的自定义postType属性
我正在为一个令人兴奋的WordPress主题构建一个childtheme。 父主题创建一个自定义帖子类型,该类型具有我想摆脱的属性“rewrite”属性。在Wordpress中更改父主题中的自定义postType属性
'rewrite' \t => array(
\t 'slug' => 'project'
)
但是它可以改变这(和其他)属性?
这里的关键是拨打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的源代码(你甚至可以做到这一点从你的浏览器现在:)),以找出一些可能并不总是只是搜索了。通过一些批判性思维,你可以按照面包屑路径来找出调整某事的最佳方式。