Локализация темы “кратких заголовков” (пользовательские типы сообщения, taxonomies)

в моей теме я хочу определить серию пользовательских типов сообщения и пользовательского taxonomies, каждый имеющий его собственный специализированный краткий заголовок; основной язык моей темы является английским, поэтому краткие заголовки будут на английском языке

например, в то время как определение краткого заголовка пользовательского сообщения вводит "продукт" args:

'rewrite' => array( 'slug' => 'product' ),

там какой-либо путь состоит в том, чтобы перевести "краткий заголовок" через po/mo файлы? могу я помещать его как:

'rewrite' => array( 'slug' => __('product', 'mytextdomain') )

или это не будет работать? что существующая практика должна локализовать краткие заголовки?

17
02.10.2011, 14:02
4 ответа

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

Рычаг в load-options-permalink.php и настроенный некоторые вещи поймать $_POST данные для сохранения краткого заголовка. Также добавьте поле настроек к странице.

<?php
add_action( 'load-options-permalink.php', 'wpse30021_load_permalinks' );
function wpse30021_load_permalinks()
{
    if( isset( $_POST['wpse30021_cpt_base'] ) )
    {
        update_option( 'wpse30021_cpt_base', sanitize_title_with_dashes( $_POST['wpse30021_cpt_base'] ) );
    }

    // Add a settings field to the permalink page
    add_settings_field( 'wpse30021_cpt_base', __( 'CPT Base' ), 'wpse30021_field_callback', 'permalink', 'optional' );
}

Затем вызов назад функционирует для поля настроек:

<?php
function wpse30021_field_callback()
{
    $value = get_option( 'wpse30021_cpt_base' );    
    echo '<input type="text" value="' . esc_attr( $value ) . '" name="wpse30021_cpt_base" id="wpse30021_cpt_base" class="regular-text" />';
}

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

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    if( ! $slug ) $slug = 'your-default-slug';

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

Вот полевая часть настроек как плагин https://gist.github.com/1275867

Править: Другая опция

Вы могли также изменить краткий заголовок на основе того, что определяется в WPLANG постоянный.

Просто запишите быструю функцию, которая содержит данные...

<?php
function wpse30021_get_slug()
{
    // return a default slug
    if( ! defined( 'WPLANG' ) || ! WPLANG || 'en_US' == WPLANG ) return 'press';

    // array of slug data
    $slugs = array( 
        'fr_FR' => 'presse',
        'es_ES' => 'prensa'
        // etc.
    );

    return $slugs[WPLANG];
}

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

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

Наилучший вариант, IMO, состоял бы в том, чтобы оба дать пользователю опцию и обеспечить твердые значения по умолчанию:

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    // They didn't set up an option, get the default
    if( ! $slug ) $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}
19
19.02.2020, 21:57
  • 1
    +1 для плагина на сути и хорошо зарегистрированном коде. В моем случае, тем не менее, это побеждает цель, которая не должна давать питание пользователю, но сделать осведомленным о локализации (SEO дружественный) URL для пользовательских типов сообщения –  Naoise Golden 11.10.2011, 20:01
  • 2
    я не уверен, что понимаю, почему Вы хотели бы удалить опцию от своего пользователя. Больше выполнение краткого заголовка через фильтр перевода дает им ту же опцию: изменить краткий заголовок. Просто не с симпатичным полем формы для заполнения. –  chrisguitarguy 12.10.2011, 19:05
  • 3
    только для любопытства, почему wpse30021? –  Naoise Golden 17.10.2011, 12:29
  • 4
    Кажется, как будто эта опция для основанной на WPLANG локализации. Но что, если Вы работаете с многоязычным сайтом? (например, плагин WPML). Вопрос больше об отображении другого краткого заголовка в зависимости от локализации клиента, чем способность установить пользовательский краткий заголовок типа сообщения от опций сервера. –  Naoise Golden 17.10.2011, 12:33
  • 5
    wpse = обмен стека WordPress. 30021 число от URL. Удача с Вашими поисками; я дал свой ответ. Дополнительная сложность, которую Вы добавляете, и очевидное полное изменение исходного вопроса - первоначально о кратких заголовках CPT, только излагает доводы для разрешения конечного пользователя выбрать их собственный краткий заголовок. –  chrisguitarguy 17.10.2011, 16:27

Если это, doest не работают, Почему не Вы просто простой делаете:

$post_slug=  __('product', 'mytextdomain');
'rewrite' => array( 'slug' => $post_slug );
2
19.02.2020, 21:57
  • 1
    это не работало на меня –  Naoise Golden 10.10.2011, 19:41
  • 2
    , это - в основном тот же код в другом стиле –  Naoise Golden 10.10.2011, 19:47
  • 3
    Вы добавили надлежащий текстовый домен? <? php load_theme_textdomain (my_text_domain);?>? –  chifliiiii 10.10.2011, 21:37
  • 4
    , Это безусловно, лучшее решение. –  Al Rosado 20.04.2017, 09:44

Я делаю точно, что в теме мы разрабатываем. Это доступно на 5 отличных языках, и каждый язык имеет переведенный набор категорий. Первый компонент URL в теме анализируется для определения, какой язык используется в формате языка страны:

/uk-en
/fr-fr
/it-it

И затем переведенные категории анализируются как дальнейшие компоненты URL.

URL анализируется в parse_request фаза:

function my_parse_request( $wp ) {
    $path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );

    $components = preg_split('|/|', $path, null, PREG_SPLIT_NO_EMPTY );

    // Determine language from $components[0]
    $language = array_shift( $components );
    ...

    // Load translations file...
    $mofile = get_stylesheet_directory()."/$language.mo";

    load_textdomain( 'mydomain', $mofile );

    ...

    // Determine category from $components[0]
    if( __( 'some-category', 'mydomain' ) == $components[0] )
      $wp->query_vars['category'] = 'some-category';

    ...
}
add_action( 'parse_request', 'my_parse_request' );

Этот пример лишен необходимых проверок, но предназначен только как пример.

Существуют недостатки к этому подходу, конечно, но он позволяет естественные URL на всех языках. Основные недостатки, которые я вижу:

1) Это не использует механизм постоянной ссылки. Это могло, вероятно, быть расширено так, чтобы надлежащие правила постоянной ссылки для всех языков были сгенерированы, и parse_request не будет необходим, но сделать это для всех языков включило бы загрузку той файл MO за другим в цикле, и я не знаю, как хорошо поддерживаемый, который является.

2) Если переводчик изменяет краткий заголовок, то ссылки делаются недействительным.

2
19.02.2020, 21:57

Я рекомендовал бы не делать краткие заголовки переводимыми.

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

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

-1
19.02.2020, 21:57
  • 1
    перевел краткие заголовки, и от SEO и от пользовательской перспективы опыта, имейте большой смысл... –  Naoise Golden 17.10.2011, 12:20
  • 2
    я не соглашаюсь, который откладывает пользовательский опыт влияния в так или иначе безотносительно. Если краткий заголовок будет использоваться в качестве части ссылки, то текст привязки к ссылке будет переведен, таким образом, пользователь не будет знать различия. И когда люди начинают бросать вокруг "SEO", я обычно думаю, "нефть змеи". Я не эксперт по SEO, но я не покупаю влияние SEO относительно переведенных кратких заголовков. –  Chip Bennett 17.10.2011, 14:28
  • 3
    я не соглашаюсь на основе опыта. У нас есть внешние контент-менеджеры, внутренние, кто является явным, что краткие заголовки URL должны быть локализованы. Это - вопрос создания complete/ly локального опыта для внешнего пользователя. Для некоторых стран, как Япония, буквально важно установить подлинный вид доверия и указать, что Вы действительно серьезно относитесь к ведению бизнеса там. –  internetross 15.02.2013, 01:13
  • 4
    должны говорить. Таким образом, если краткий заголовок является (как часто) названием объекта или таксономии, перезапись должна принять во внимание множественные числа, а также переводы. Это не опция, и для SEO и для просто хорошей практики к конечным пользователям. –  Luca Reghellin 21.12.2015, 16:11

Теги

Похожие вопросы