Как переименовать сообщения по умолчанию

8

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

Эви майло
источник
этот плагин меняет типы постов: wordpress.org/extend/plugins/post-type-switcher Я думаю, что этот плагин больше работает в массе wordpress.org/extend/plugins/convert-post-types
helgatheviking

Ответы:

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;
}

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

supajb
источник
2
Хотя это хорошо, так как отображение технической концепции, замена некоторых слов во всем локализованном тексте слишком широка.
Первое
Как это повлияет на производительность? Вышеуказанные фильтры используются только в бэкэнде?
mikkelbreum
Я думаю, что это не очень хорошее решение для этого конкретного случая. $ переведенный может содержать строку типа «нажмите на почту» или «se om du har fået post» (на датском языке), и в этом случае вы не захотите заменять «post» на «news»
mikkelbreum
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' );
elbatron
источник
7

Вам необходимо создать пользовательский тип сообщения «Портфолио».

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

Чип Беннетт
источник
Поскольку до сегодняшнего дня я не использовал пользовательские типы сообщений, а созданный мной веб-сайт использует функцию блога для запуска портфолио, поскольку клиент не хочет вести блог, поэтому я подумал, почему бы не использовать блог, настроенный для запуска портфолио. - кроме как изобретать велосипед, так сказать. Кажется, намного проще изменить названия мануалов, чем заново делать весь сайт, так как весь контент был добавлен.
Эви Майло,
Нужно просто выполнить SQL-запрос, чтобы изменить post_type для всех затронутых постов, как только вы создадите свой собственный тип поста ...
Chip Bennett
1
Чип определенно прав здесь. Это то, что я бы сделал, и что должно быть сделано в случае, подобном этому, ИМХО.
Mfields
2
Требуемый sql выглядит примерно так. UPDATE wp_posts SET post_type = 'funny-bunny' WHERE post_type = 'post';Скорее всего, вам потребуется изменить префикс таблицы (wp_), чтобы отразить этот параметр в вашей текущей установке.
Mfields
2
Я позволю себе отличаться от благородного Чипа Беннетта ... Должности здесь организованы в хронологическом порядке. Зачем регистрировать другой post_type, менять запросы, если все необходимое уже есть? На своих неанглийских веб-сайтах я регулярно меняю языковые файлы WordPress в соответствии с функциональностью сообщений и переименовываю их в «Новости», «Статьи» или «Портфолио».
brasofilo
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;
}

Я получил этот совет из журнала Smashing и проверил его, и он прекрасно работает

http://www.smashingmagazine.com/2011/05/10/new-wordpress-power-tips-for-template-developers-and-consultants/
Boldhand
источник
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' );
davidcondrey
источник
Чем это отличается от другого ответа @elbatron?
Кайзер
@kaiser - Этот ответ правильный, тот, который помечен как ответ OP, является неправильным (посмотрите на действия - 'admin_menu' и 'init' неправильны. Также этот ответ использует __()функцию пользователя .
Дэвид Гард
Почему то echo '';?
Билл
0

Если вы просто хотите изменить метку меню администратора с Post -> Portfolio, посмотрите на этот вопрос:

Изменение меток меню администратора

[Обновить]

Этот плагин Admin Menu Editor выглядит так, как будто он позволит вам легче менять метки меню - хотя я не проверял его.

ана
источник
спасибо, я посмотрю, смогу ли я что-нибудь выяснить из этого, хотя это выглядит немного сложным для меня.
Эви Майло,
1
Я добавил ссылку на плагин, который должен вам помочь
anu
спасибо за ссылку, но я хочу больше узнать о файле functions.php и не использовать слишком много плагинов. Я перешел по вашей первой ссылке, и она в конечном итоге привела меня сюда: new2wp.com/snippet/change-wordpress-posts-post-type-news, и это помогло мне разобраться в этом очень быстро - спасибо за вашу помощь!
Эви Майло,
@ Evi Milo - вы должны пометить ответ как принятый.
Кайзер
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');
пепин
источник
переход на этот путь создаст слишком много дополнительной работы на этом позднем этапе проекта - не то, что позволит бюджет - весь контент теперь добавлен, и я просто хотел посмотреть, есть ли способ переименовать записи в портфолио, чтобы был менее запутанным для клиента.
Эви Майло,
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';
}
Нуно Сарменто
источник