add_post_type_support()
和remove_post_type_support()
,但是它们不能访问register_post_type()
接受的参数的完整列表。特别是,也许我想禁用帖子类型存档,隐藏管理用户界面,从搜索中隐藏等,同时不考虑其余帖子类型设置。在我面前:说明
创建或修改帖子类型。
但是过去,当我尝试执行此操作时,它似乎没有起作用。这个函数真的是用于修改帖子类型的吗?如果是这样,您能简单地重新声明几个参数并让其余的参数留着吗?如何做到的。
#1 楼
此功能是否真的可以修改帖子类型?
是的。
不。如果要修改帖子类型的参数,则需要使用
get_post_type_object
来获取帖子类型对象,修改所需内容,然后使用修改后的类型将其重新注册为新的$ args参数。#2 楼
经过一番研究后,我发现这些答案都不是最新的。截至2015年12月8日,WordPress包括一个新的过滤器
register_post_type_args
,您可以使用它来注册已注册帖子类型的参数。 br /> function wp1482371_custom_post_type_args( $args, $post_type ) {
if ( $post_type == "animal-species" ) {
$args['rewrite'] = array(
'slug' => 'animal'
);
}
return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );
评论
这是现在正确的方法。
–戴夫·罗姆西
16 Sep 15 '23:47
这应该是公认的答案
– klewis
16年11月18日在14:20
如果在运行时中注册后需要更新该怎么办?例如:初始化后
–卢卡斯·布斯塔曼特(Lucas Bustamante)
19年6月27日在19:40
@LucasBustamante没关系。只需在您的插件/主题过程中调用“ add_filter”行即可,而无需执行任何操作。将在每个register_post_type函数期间调用该过滤器。我的代码不起作用的唯一情况是,如果帖子类型未正确注册。所有帖子类型都应在初始化挂钩期间进行注册。从法典中:“如果在'init'之前调用,register_post_type将不起作用,而在以后调用时,新创建或修改的帖子类型的各个方面将无法正常工作。如果您仍然需要帮助,建议您在新问题中发布更多详细信息。
–拉德利·斯蒂斯塔(Radley Sustaire)
19-6-28在2:57
因此,此代码将更改“ slug-of-post”,如“ sitename / projects / slug-of-post”?
– Krys
20-10-16在6:24
#3 楼
这是一个如何使用'registered_post_type'
过滤器修改另一个插件中帖子类型的示例。我使用的一个插件的定义中没有包含menu_icon,因此我想添加一个自己的。
<?php
/**
* Add a menu icon to the WP-VeriteCo Timeline CPT
*
* The timeline plugin doesn't have a menu icon, so we hook into 'registered_post_type'
* and add our own.
*
* @param string $post_type the name of the post type
* @param object $args the post type args
*/
function wpse_65075_modify_timeline_menu_icon( $post_type, $args ) {
// Make sure we're only editing the post type we want
if ( 'timeline' != $post_type )
return;
// Set menu icon
$args->menu_icon = get_stylesheet_directory_uri() . '/img/admin/menu-timeline.png';
// Modify post type object
global $wp_post_types;
$wp_post_types[$post_type] = $args;
}
add_action( 'registered_post_type', 'wpse_65075_modify_timeline_menu_icon', 10, 2 );
评论
在大多数情况下,这是一种更清洁的方法。但是,应注意,此过滤器为时已晚,无法被重写使用,因此在这种情况下,必须使用可接受的答案。
–mrwweb
2015年3月17日在22:44
#4 楼
其他代码注册之后,钩住'registered_post_type'
。在register_post_type()
的末尾被调用。您有两个参数:$post_type
和$args
。现在您可以更改此帖子类型的任何内容。检查
$GLOBALS['wp_post_types']
是否有某些选项。评论
感谢您将我指向该挂钩。这回答了有关如何修改帖子类型的(更重要的)问题,但是对包含“修改”的register_post_type()的描述又如何呢?那是错的吗?我现在该不该跳上互联网马并从食品法典委员会手中夺走它?
–mrwweb
2012年9月13日下午16:32
$ wp_post_types [$ post_type] = $ args; …建议您应该能够更改属性。向您的问题添加失败代码的示例。
– fuxia♦
2012年9月13日下午16:36
#5 楼
我使用“事件日历”插件遇到了同样的事情。我将以下代码添加到function.php中,以修改tribe_organizer帖子类型
评论
很好的样品,谢谢!
– Philipp
20年8月25日在11:25
#6 楼
我不知道这是否难看,但是只要需要操纵单个参数,就可以“即时”更改GLOBAL
占位符。这就是我们使用非公共帖子类型contents
在管理菜单中被接受的方式。在菜单渲染之前,我们先钩上钩子,然后在钩子上钩住:开发人员优先考虑的问题... 开发人员-如果这可能引起任何问题,请发表评论。
评论
用相同的register_post_type修改后的参数进行两次连续调用是否正确?我以您的“是”为前提,并且它不会转储任何错误并具有预期的效果。实际案例是我在此答案中提出的第二个选项:wordpress.stackexchange.com/a/74331/12615
–brasofilo
2012年11月29日14:54
是的,这行得通,但是好像您必须这样做,那么您需要添加一些过滤器或其他工具,以防止不得不一次又一次地重复注册相同的帖子类型。基本上,首先整理参数,然后注册。
–奥托
2012年11月29日19:13
我只是考虑了一下,因为插件的register_post_type之前提供了钩子。实际上,没有必要。这是一个“用于记录”的问题,感谢您的反馈。
–brasofilo
2012年11月29日19:22