问题描述

在我的主题中,我想定义一系列定制的帖子类型和自定义分类,每个都有自己的定制 s 子; 我的主题的基础语言是英语,所以 s s 将是英文

例如在定义自定义帖子类型”product” args 时:

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

有没有办法通过 po /mo 文件翻译”slug”?我可以把它当作:

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

还是不行?现在的本地化 s 子的做法是什么?

最佳解决方案

我不会试图本地化你的 s 子。相反,为什么不通过在永久链接设置页面添加另一个字段来向用户提供更改选项的选项?

钩入 load-options-permalink.php 并设置一些东西来捕捉 $_POST 数据来保存你的 s 。。还要向页面添加一个设置字段。

<?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 抓住 s 子。如果不在,请使用默认值。

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。