get post type plural

时间:2012-05-13 作者:kaiser

目前,我正在尝试获取post type标签的复数形式。详细内容:

$GLOBALS[\'wp_post_types\'][ get_current_screen()->post_type ]->labels->name
这就是我尝试使用公共wp API函数在管理UI中检索它的方式:

$post_type_name = get_current_screen()->post_type;
$post_type_obj = get_post_type_object( $post_type_name );
get_post_type_labels( $post_type_obj );
结果是以下错误:

Fatal error: Cannot use object of type stdClass as array in D:\\development\\xampp\\htdocs\\wp_inst\\wp-includes\\post.php on line 1209

问题是,post type对象标签也是一个对象,而get_post_type_labels() 呼叫_get_custom_object_labels() 内部,似乎需要一个数组。

“乐趣”是_get_custom_object_labels() 功能:

$labels = array_merge( $defaults, $object->labels );
return (object)$labels;
那么,我是否使用了错误的函数?核心功能是否错误?此核心功能是否仅用于自定义post类型注册?

注:目前在WP版本3.3.2上

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

编辑:

get\\u post\\u type\\u标签从未打算成为公共功能。它仅在注册帖子类型时在内部使用。查看这些trac票据:


如您在问题中所述,您可以直接从全球网站获取标签:

function c3m_get_labels() {
    global $wp_post_types;
    $post_type_name = get_current_screen ()->post_type;
    $labels = &$wp_post_types[$post_type_name]->labels;
    return $labels;
}
运行函数:

$labels = c3m_get_labels();
    var_dump($labels);
返回值:

object(stdClass)[232]
  public \'name\' => string \'Posts\' (length=5)
  public \'singular_name\' => string \'Post\' (length=4)
  public \'add_new\' => string \'Add New\' (length=7)
  public \'add_new_item\' => string \'Add New Post\' (length=12)
  public \'edit_item\' => string \'Edit Post\' (length=9)
  public \'new_item\' => string \'New Post\' (length=8)
  public \'view_item\' => string \'View Post\' (length=9)
  public \'search_items\' => string \'Search Posts\' (length=12)
  public \'not_found\' => string \'No posts found.\' (length=15)
  public \'not_found_in_trash\' => string \'No posts found in Trash.\' (length=24)
  public \'parent_item_colon\' => null
  public \'all_items\' => string \'All Posts\' (length=9)
  public \'menu_name\' => string \'Posts\' (length=5)
  public \'name_admin_bar\' => string \'Post\' 
无需全局$wp\\u post\\u类型即可替代使用:

function c3m_get_labels() {
    $post_type_name = get_current_screen ()->post_type;
    $post_type_obj = get_post_type_object ( $post_type_name );
    return $post_type_obj;
}
运行函数:

$labels = c3m_get_labels();
    $labels = $labels->labels;
    var_dump($labels);
在做了几次测试之后,我得出结论,不可能使用get\\u post\\u type\\u标签将$post\\u type\\u对象传递为specified in the codex. 所以它似乎是get_post_type_labels 在注册post类型时,位于核心内部。

SO网友:Adam

这很有效。。。

$object = get_post_type_object( \'post\' );

echo $object->labels->name;
echo $object->label;

// returns plural name = posts

// var_dump ( $object ); to return all items within the object
// In this instance you can access anything within the class by `$object-> ??? -> ???`
这很有效。。。

$object = get_post_type_object( \'post\' )->labels;

echo $object->name;

// returns plural name = posts
// in this instance you have access to the labels array only within the object
这也行(但你为什么要麻烦……)

$post_type_obj = get_post_type_object( \'post\' )->labels;
$object = get_post_type_labels( $post_type_obj );

echo $object->name;

// returns plural name = posts
这同样有效,

$post_type_obj = get_post_type_object( \'post\' );
$object = get_post_type_labels( $post_type_obj->labels );   

echo $object->name;

// returns plural name = posts
。。。并证明完全可以使用get_post_type_labels 在主题/插件中通过post_type_object 但正如我所说,法典没有告诉你->attributes 在您想要访问的对象中,因此您会收到错误;

Fatal error: Cannot use object of type stdClass as array in C:\\xampp\\htdocs\\wp-includes\\post.php on line 1209

如果您的用例允许或保证,将代码包装到函数中也是一种解决方案。

上述任何一项都是完全可以接受的,无论其是否在功能中,它们仍在执行相同的机制,并且如果核心发生变化,则容易出现相同的问题。

SO网友:ApocalypseLater

我有许多不同的事件类型,并希望在循环中的每个标题旁边显示事件类型,因此我对userabuser的代码进行了非常小的修改:

$object = get_post_type_object( get_post_type() )->labels;
echo $object->name;
因此,我的完整代码如下所示:

<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> - <?php $object = get_post_type_object( get_post_type() )->labels;
echo $object->name; ?></h3>
而且效果很好。每个标题后都显示一个连字符和复数事件类型。

结束

相关推荐

在插件开发中找不到筛选器API的文档

我是wordpress插件开发新手,今天下午我阅读了整个文档http://codex.wordpress.org/Plugin_API/Filter_Reference, 我尝试编写一些代码,如插件文件中的以下代码:add_filter(\'the_title\', \'my_own_function\', 10, 2); Function is:function my_own_function($title, $post_id){ return $title. $post_id;