Как переименовать стандартный тип записей "Записи" (Posts) в WordPress
Я использую тип записей "Записи" (Posts) для отображения элементов портфолио, и выглядит странно, когда портфолио помечено как записи. Есть ли способ переименовать "Записи" в "Портфолио", чтобы лучше отразить их использование.

Я использовал следующий скрипт для переименования типа записи по умолчанию:
function change_post_menu_label() {
global $menu, $submenu;
$menu[5][0] = 'Портфолио';
$submenu['edit.php'][5][0] = 'Портфолио';
$submenu['edit.php'][10][0] = 'Добавить портфолио';
$submenu['edit.php'][16][0] = 'Метки портфолио';
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 = 'Портфолио';
$labels->singular_name = 'Портфолио';
$labels->add_new = 'Добавить портфолио';
$labels->add_new_item = 'Добавить портфолио';
$labels->edit_item = 'Редактировать портфолио';
$labels->new_item = 'Новое портфолио';
$labels->view_item = 'Просмотреть портфолио';
$labels->search_items = 'Искать портфолио';
$labels->not_found = 'Не найдено';
$labels->not_found_in_trash = 'Не найдено в корзине';
}
add_action( 'init', 'change_post_object_label' );

Если вы хотите просто изменить название записей, а не создавать пользовательский тип записи, добавьте этот код в файл functions.php вашей темы.
// подключим фильтры перевода
add_filter( 'gettext', 'change_post_to_portfolio' );
add_filter( 'ngettext', 'change_post_to_portfolio' );
function change_post_to_portfolio( $translated ) {
$translated = str_ireplace( 'Post', 'Портфолио', $translated ); // ireplace работает только в PHP5 и выше
return $translated;
}
В интересах прозрачности, я взял этот код из этой статьи, хотя использовал подобные трюки и раньше.

Хотя это хорошая демонстрация технической концепции, замена некоторых слов во всем локализованном тексте слишком широкое решение.

Как это повлияет на производительность? Эти фильтры используются только в бэкенде?

Вам нужно создать пользовательский тип записи "Портфолио".
Записи — это записи. Зачем пытаться использовать их как что-то другое, а затем менять их терминологию, вместо того чтобы написать одну-две простые функции в файле functions.php
, которые дадут вам именно ту функциональность и терминологию, которые вам нужны?

Так как я до сегодняшнего дня не использовал пользовательские типы записей, а сайт, который я настроил, использует функционал блога для портфолио, так как клиенту не нужен блог - вот я и подумал, почему бы не использовать настройки блога для портфолио вместо того, чтобы изобретать велосипед. Кажется гораздо проще изменить названия меню, чем переделывать весь сайт, ведь весь контент уже добавлен.

Достаточно было бы одного SQL-запроса, чтобы изменить post_type для всех затронутых записей, как только вы создадите свой пользовательский тип записи...

Для такого эксперта, как вы, может быть и легко - но не для новичка вроде меня.

Чип здесь абсолютно прав. Это именно то, что я бы сделал и что должно быть сделано в подобном случае, ИМХО.

Нужный SQL-запрос выглядит примерно так: UPDATE wp_posts SET post_type = 'funny-bunny' WHERE post_type = 'post';
Скорее всего, вам понадобится изменить префикс таблицы (wp_) в соответствии с настройками вашей текущей установки.

Позволю себе не согласиться с уважаемым Чипом Беннетом... Записи предназначены для организации элементов в хронологическом порядке. Зачем регистрировать новый post_type, изменять запросы, если всё необходимое уже есть? В своих неанглоязычных сайтах я регулярно изменяю языковые файлы WordPress, чтобы соответствовать функциональности записей, и переименовываю их в Новости, Статьи или Портфолио.

Функция get_post_type_object справится с этой задачей.
add_action( 'init', 'ns_change_post_object' );
// Изменяем название записей на Новости в админ-панели
function ns_change_post_object() {
$get_post_type = get_post_type_object('post');
$labels = $get_post_type->labels;
$labels->name = 'Новости';
$labels->singular_name = 'Новость';
$labels->add_new = 'Добавить новость';
$labels->add_new_item = 'Добавить новость';
$labels->edit_item = 'Редактировать новость';
$labels->new_item = 'Новая новость';
$labels->view_item = 'Просмотреть новость';
$labels->search_items = 'Искать новости';
$labels->not_found = 'Новости не найдены';
$labels->not_found_in_trash = 'В корзине нет новостей';
$labels->all_items = 'Все новости';
$labels->menu_name = 'Новости';
$labels->name_admin_bar = 'Новость';
}

// добавляем хуки для фильтров перевода
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 работает только в PHP5 и выше
return $translated;
}
Я нашел этот совет в Smashing Magazine, протестировал его, и он отлично работает
http://www.smashingmagazine.com/2011/05/10/new-wordpress-power-tips-for-template-developers-and-consultants/

Я нашел эту тему, когда искал решение для изменения типа записи с одного названия на другое.
Вместо того чтобы делать кастомный запрос, как предлагал кто-то здесь, я просто сделал вот так:
$post = get_post( $id ); // Получаем текущий ID записи
$post->post_type = 'receipt'; // Новое название типа записи
wp_update_post( $post ); // Обновляем новую информацию
Кастомный тип записи (CPT), конечно, уже должен быть создан и настроен..

Переименовать записи в портфолио
function litho_posts_portfolio() {
global $menu;
global $submenu;
$menu[5][0] = __("Портфолио", 'litho');
$submenu['edit.php'][5][0] = __("Портфолио", 'litho');
$submenu['edit.php'][10][0] = __("Новый элемент", 'litho');
echo '';
}
function litho_posts_portfolio_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = __("Портфолио", 'litho');
$labels->singular_name = __("Элемент", 'litho');
$labels->add_new = __("Новый элемент", 'litho');
$labels->add_new_item = __("Новый элемент", 'litho');
$labels->edit_item = __("Редактировать элемент", 'litho');
$labels->new_item = __("Элемент", 'litho');
$labels->view_item = __("Просмотреть элемент", 'litho');
$labels->search_items = __("Искать в портфолио", 'litho');
$labels->not_found = __("Элементы не найдены", 'litho');
$labels->not_found_in_trash = __("В корзине элементов не найдено", 'litho');
}
add_action( 'init', 'litho_posts_portfolio_label' );
add_action( 'admin_menu', 'litho_posts_portfolio' );

@kaiser - Этот ответ правильный, а тот, что помечен как решение автором вопроса, неверен (посмотрите на действия - 'admin_menu' и 'init' перепутаны местами. Также в этом ответе используется функция __()
.

Вам просто нужно создать другой пользовательский тип записи с такими же возможностями, как у обычной записи. Затем вы можете отключить меню "Записи" с помощью этого кода:
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');

выбор этого пути создаст слишком много дополнительной работы на такой поздней стадии проекта - бюджет этого не позволяет - весь контент уже добавлен, и я просто хотел узнать, есть ли способ переименовать записи в портфолио, чтобы это было менее запутанно для клиента.

Если вы просто хотите изменить название пункта меню в админ-панели с "Записи" на "Портфолио", то посмотрите этот вопрос:
Изменение названий пунктов меню админки
[Обновление]
Этот плагин Редактор меню админки, похоже, позволяет изменять названия пунктов меню проще - хотя я его не тестировал.

Спасибо, попробую разобраться с этим, хотя выглядит немного сложновато для меня.

Спасибо за ссылку, но я хочу больше разобраться с файлом functions.php и избегать использования слишком большого количества плагинов. Я проследовал по вашей первой ссылке и в итоге попал сюда: http://new2wp.com/snippet/change-wordpress-posts-post-type-news/ и это помогло мне очень быстро во всем разобраться - спасибо за помощь!
