Как переименовать стандартный тип записей "Записи" (Posts) в WordPress

28 апр. 2011 г., 16:49:37
Просмотры: 19.5K
Голосов: 10

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

1
Комментарии

этот плагин изменяет типы записей: http://wordpress.org/extend/plugins/post-type-switcher/ думаю, этот работает более массово http://wordpress.org/extend/plugins/convert-post-types/

helgatheviking helgatheviking
29 июл. 2011 г. 07:22:21
Все ответы на вопрос 9
0
12

Я использовал следующий скрипт для переименования типа записи по умолчанию:

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' );
28 сент. 2012 г. 09:53:16
3
10

Если вы хотите просто изменить название записей, а не создавать пользовательский тип записи, добавьте этот код в файл 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;
}

В интересах прозрачности, я взял этот код из этой статьи, хотя использовал подобные трюки и раньше.

13 мая 2011 г. 03:31:04
Комментарии

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

Rarst Rarst
18 нояб. 2012 г. 17:15:00

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

mikkelbreum mikkelbreum
1 окт. 2014 г. 12:16:56

Я считаю, что это не лучшее решение для данного конкретного случая. Переменная $translated может содержать строку типа 'click on the post man' или 'se om du har fået post' (датский), в которых замена 'post' на 'news' будет некорректной.

mikkelbreum mikkelbreum
1 окт. 2014 г. 12:22:55
6

Вам нужно создать пользовательский тип записи "Портфолио".

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

28 апр. 2011 г. 17:04:55
Комментарии

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

Evie Milo Evie Milo
28 апр. 2011 г. 18:12:57

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

Chip Bennett Chip Bennett
28 апр. 2011 г. 18:14:31

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

Evie Milo Evie Milo
28 апр. 2011 г. 18:23:00

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

mfields mfields
13 мая 2011 г. 03:36:07

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

mfields mfields
13 мая 2011 г. 03:39:47

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

brasofilo brasofilo
1 апр. 2012 г. 20:36:39
Показать остальные 1 комментариев
0

Функция 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 = 'Новость';
}
16 мая 2020 г. 01:48:16
0
// добавляем хуки для фильтров перевода
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/
12 мая 2011 г. 17:57:57
0

Я нашел эту тему, когда искал решение для изменения типа записи с одного названия на другое.

Вместо того чтобы делать кастомный запрос, как предлагал кто-то здесь, я просто сделал вот так:

$post = get_post( $id );      // Получаем текущий ID записи
$post->post_type = 'receipt'; // Новое название типа записи
wp_update_post( $post );      // Обновляем новую информацию

Кастомный тип записи (CPT), конечно, уже должен быть создан и настроен..

10 нояб. 2012 г. 13:11:19
3

Переименовать записи в портфолио

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' );
19 июн. 2014 г. 07:53:03
Комментарии

Чем это отличается от другого ответа @elbatron?

kaiser kaiser
19 июн. 2014 г. 12:30:36

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

David Gard David Gard
16 апр. 2015 г. 16:46:39

Зачем здесь echo '';?

Bill Bill
28 февр. 2016 г. 16:44:53
1

Вам просто нужно создать другой пользовательский тип записи с такими же возможностями, как у обычной записи. Затем вы можете отключить меню "Записи" с помощью этого кода:

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');
28 апр. 2011 г. 17:06:47
Комментарии

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

Evie Milo Evie Milo
28 апр. 2011 г. 18:15:04
4

Если вы просто хотите изменить название пункта меню в админ-панели с "Записи" на "Портфолио", то посмотрите этот вопрос:

Изменение названий пунктов меню админки

[Обновление]

Этот плагин Редактор меню админки, похоже, позволяет изменять названия пунктов меню проще - хотя я его не тестировал.

28 апр. 2011 г. 17:22:40
Комментарии

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

Evie Milo Evie Milo
28 апр. 2011 г. 18:13:30

Я добавил ссылку на плагин, который должен вам помочь

anu anu
28 апр. 2011 г. 18:19:28

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

Evie Milo Evie Milo
28 апр. 2011 г. 18:24:09

@Evie Milo - вам следует отметить ответ как принятый.

kaiser kaiser
29 апр. 2011 г. 02:54:37