如何重命名默认帖子类型的帖子


8

我正在使用帖子类型的帖子来显示投资组合项目,而将投资组合标记为帖子看起来很奇怪。有什么方法可以将帖子重命名为投资组合,以更好地反映其用法。


这个插件会更改帖子类型:wordpress.org/extend/plugins/post-type-switcher我认为这个插件在批量工作中会更有效wordpress.org/extend/plugins/convert-post-types
helgatheviking 2011年

Answers:


9

如果您只想重命名帖子的外观,而不是创建自定义帖子类型,则将此代码添加到主题functions.php文件中。

// hook the translation filters
add_filter(  'gettext',  'change_post_to_portfolio'  );
add_filter(  'ngettext',  'change_post_to_portfolio'  );

function change_post_to_portfolio( $translated ) {
  $translated = str_ireplace(  'Post',  'Portfolio',  $translated );  // ireplace is PHP5 only
  return $translated;
}

为了透明起见,我从本文中获取了此代码,尽管我过去使用过类似的技巧。


2
虽然可以很好地显示技术概念,但是在所有本地化文本中替换某些单词的范围太广了。
拉斯特(Rarst)2012年

这将如何影响性能?上面的过滤器仅在后端使用吗?
mikkelbreum 2014年

我认为这不是解决此特定情况的好方法。$ translated可能包含“ click on the post man”或“ se om du harfåetpost”(丹麦语)之类的字符串,在这种情况下,您不希望将“ post”替换为“ news”
mikkelbreum 2014年

9

我使用以下脚本重命名默认帖子类型:

function change_post_menu_label() {
    global $menu, $submenu;

    $menu[5][0] = 'Portfolio';
    $submenu['edit.php'][5][0] = 'Portfolio';
    $submenu['edit.php'][10][0] = 'New Portfolio';
    $submenu['edit.php'][16][0] = 'Portfolio Tags';
    echo '';
}
add_action( 'admin_menu', 'change_post_menu_label' );

function change_post_object_label() {
    global $wp_post_types;

    $labels = &$wp_post_types['post']->labels;
    $labels->name = 'Portfolio';
    $labels->singular_name = 'Portfolio';
    $labels->add_new = 'New Portfolio';
    $labels->add_new_item = 'New Portfolio';
    $labels->edit_item = 'Edit Portfolio';
    $labels->new_item = 'New Portfolio';
    $labels->view_item = 'View Portfolio';
    $labels->search_items = 'Search Portfolio';
    $labels->not_found = 'Not found';
    $labels->not_found_in_trash = 'Not found in trash';
}
add_action( 'init', 'change_post_object_label' );

7

您需要创建一个自定义帖子类型“ Portfolio”。

帖子就是帖子。为什么要尝试将它们用作不是他们的东西,然后尝试更改其命名方式,而不是在中编写一个或两个简单的函数functions.php,而这将导致同时具有所需的确切功能和确切命名法?


因为直到今天我还没有使用自定义帖子类型,并且我设置的网站使用博客功能来运行投资组合,因为客户不希望使用博客-所以我想为什么不使用博客设置来运行投资组合呢? -可以节省重新发明轮子的时间。更改手册名称似乎比重新添加整个网站要容易得多,因为已添加了所有内容。
Evie Milo

创建自定义帖子类型后,只需执行一次SQL查询即可更改所有受影响的帖子的post_type ...
Chip Bennett

1
芯片在这里绝对正确。在这种恕我直言的情况下,这就是我会做的,应该做的。
mfields

2
在SQL你需要看起来有点像这样UPDATE wp_posts SET post_type = 'funny-bunny' WHERE post_type = 'post';你很可能需要改变表前缀(WP_),以反映当前安装该设置。
mfields,2011年

2
我希望与尊敬的Chip Bennett有所不同...那里的帖子以年代顺序排列元素。如果您所需的一切已经存在,为什么还要注册另一个post_type来更改查询?在非英语网站中,我会定期更改WordPress语言文件以匹配“帖子”功能,然后将其重命名为“新闻”,“文章”或“投资组合”。
brasofilo 2012年

2
// hook the translation filters
add_filter(  'gettext',  'change_post_to_article'  );
add_filter(  'ngettext',  'change_post_to_article'  );

function change_post_to_article( $translated ) {
     $translated = str_ireplace(  'Post',  'Article',  $translated );  // ireplace is PHP5 only
     return $translated;
}

我从粉碎杂志上获得了这个技巧,并对其进行了测试,效果很好

http://www.smashingmagazine.com/2011/05/10/new-wordpress-power-tips-for-template-developers-and-consultants/

1

我在寻找将帖子类型从一个名称更改为另一个名称的解决方案时找到了这个线程。

与其按照某人的建议进行自定义查询,我只是这样做:

$post = get_post( $id );      // The current post id
$post->post_type = 'receipt'; // The new post type name
wp_update_post( $post );      // Updating the new information

该cpt必须已创建并已格式化。


1

将帖子重命名为作品集

function litho_posts_portfolio() {
    global $menu;
    global $submenu;
    $menu[5][0] = __("Portfolio", 'litho');
    $submenu['edit.php'][5][0] = __("Portfolio", 'litho');
    $submenu['edit.php'][10][0] = __("New Item", 'litho');
    echo '';
}
function litho_posts_portfolio_label() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name = __("Portfolio", 'litho');
    $labels->singular_name = __("Item", 'litho');
    $labels->add_new = __("New Item", 'litho');
    $labels->add_new_item = __("New Item", 'litho');
    $labels->edit_item = __("Edit Item", 'litho');
    $labels->new_item = __("Item", 'litho');
    $labels->view_item = __("View Item", 'litho');
    $labels->search_items = __("Search Portfolio", 'litho');
    $labels->not_found = __("No Item Found", 'litho');
    $labels->not_found_in_trash = __("No Item found in Trash", 'litho');
}
add_action( 'init', 'litho_posts_portfolio_label' );
add_action( 'admin_menu', 'litho_posts_portfolio' );

这与@elbatron的其他答案有何不同?
kaiser 2014年

@kaiser -这个答案是正确的,标记为被OP的答案之一是不正确的(看行动- “admin_menu”和“初始化”是错误的周围顺便也这样的回答用户。__()功能。
大卫·加尔

为什么echo '';呢?
比尔

0

如果您只想从发布->投资组合中更改管理菜单标签,请查看以下问题:

更改管理员菜单标签

[更新]

这个插件的Admin Menu Editor看起来可以让您更轻松地更改菜单标签-尽管我尚未对其进行测试。


谢谢,我看是否能从中找出一些东西,尽管对我来说看起来有点复杂。
Evie Milo

1
我添加到一个插件的链接,可以帮助你
ANU

感谢您的链接,但我想更多地进入functions.php文件,并避免使用太多插件。我遵循了您的第一个链接,它最终将我到了这里:new2wp.com/snippet/change-wordpress-posts-post-type-news,它帮助我非常迅速地解决了问题-感谢您的帮助!
Evie Milo

@Evie Milo-您应将答案标记为已接受。
kaiser

0

您只需要创建一个具有与常规帖子相同功能的自定义帖子即可。然后,您可以通过以下方式禁用“帖子”菜单:

function remove_menus()
{
    global $menu;
    $restricted = array( __('Posts'));
    end ($menu);

    while (prev($menu))
    {
        $value = explode(' ',$menu[key($menu)][0]);

        if(in_array($value[0] != NULL?$value[0]:"" , $restricted))
        {
            unset($menu[key($menu)]);
        }
    }
}
add_action('admin_menu', 'remove_menus');

沿着这条路线走,将在项目的后期阶段产生太多的额外工作-预算不允许的事情-现在已添加所有内容,我只是想看看是否有一种方法可以将帖子重命名为投资组合,因此对客户而言,混乱程度较小。
Evie Milo

0

get_post_type_object将做的工作。

add_action( 'init', 'ns_change_post_object' );
// Change dashboard Posts to News
function ns_change_post_object() {
   $get_post_type = get_post_type_object('post');
    $labels = $get_post_type->labels;
    $labels->name = 'News';
    $labels->singular_name = 'News';
    $labels->add_new = 'Add News';
    $labels->add_new_item = 'Add News';
    $labels->edit_item = 'Edit News';
    $labels->new_item = 'News';
    $labels->view_item = 'View News';
    $labels->search_items = 'Search News';
    $labels->not_found = 'No News found';
    $labels->not_found_in_trash = 'No News found in Trash';
    $labels->all_items = 'All News';
    $labels->menu_name = 'News';
    $labels->name_admin_bar = 'News';
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.