我正在尝试创建一个所有自定义帖子类型的下拉列表。
看起来是这样的:
<select>
<option value="post">Post</option>
<option value="book">Book</option>
<option value="some-other-post-type">Something</option>
<option value="team">Team Members</option>
</select>
我遇到了
get_post_types()
函数,该函数应获取所有已注册post类型对象的列表。但它不显示我的自定义帖子类型。。。
是否可以获得一个包含slug和主题中注册的所有帖子类型的标题的数组?考虑到职位类型的数量是未知的和动态的。每次添加或删除新的自定义帖子类型时,它都应反映在下拉列表中。
我的测试:
$args = array(
\'public\' => true,
\'_builtin\' => false // Use false to return only custom post types
);
$post_types = get_post_types( $args );
print_r($post_types);
它返回一个空数组。。。没有我注册的自定义帖子类型。
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
好的,那么函数get_post_types
这正是你要找的。
$args = array(
\'public\' => true,
\'_builtin\' => false
);
$output = \'names\'; // names or objects, note names is the default
$operator = \'and\'; // \'and\' or \'or\'
$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
echo \'<p>\' . $post_type . \'</p>\';
}
但有几件事你应该小心:
你不能太快得到这些帖子类型。在上注册帖子类型是非常常见的做法init
钩子,所以在钩子启动之前,您不会得到这些帖子类型如果要查询公共帖子类型,则只会得到注册为公共的帖子类型(而不是基于其他参数的公共帖子类型)默认情况下,此函数将只返回帖子类型的名称。如果您想获得更多信息,可以通过objects
作为第二个参数