WordPress i18n-友好的preg_place帖子标题

时间:2016-08-19 作者:Mayeenul Islam

我脱光了衣服Private:Protected: 来自我的自定义帖子标题,这些标题必须是私有的。我正在使用CSS Tricks\' snippet 为此:

function the_title_trim($title) {

    if( is_admin() )
       return $title;

    $title = esc_attr($title);

    $findthese = array(
        \'#Protected:#\',
        \'#Private:#\'
    );

    $replacewith = array(
        \'\', // What to replace "Protected:" with
        \'\' // What to replace "Private:" with
    );
    global $post;
    if( \'mycpt\' === get_post_type($post) ) {
       $title = preg_replace( $findthese, $replacewith, $title );
    }

    return $title;
}

add_filter(\'the_title\', \'the_title_trim\');
它工作正常。

但最近,当我换一种不同的语言时,我发现它不起作用。你可以很容易地猜到$findthese 数组无法将任何其他语言的字符串与指定的字符串匹配。

如何使用preg_replace() 用于剥离文本,支持i18n字符串?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我们可以使用protected_title_formatprivate_title_format 自WordPress 2.8版起提供的过滤器:

 add_filter( \'protected_title_format\', \'wpse_pure_title\', 10, 2 );
 add_filter( \'private_title_format\',   \'wpse_pure_title\', 10, 2 );

 function wpse_pure_title( $format, \\WP_Post $post )
 {
    return  \'mycpt\' === get_post_type( $post ) ? \'%s\' : $format;
 }
为了摆脱前端的“私有”和“受保护”部件mycpt 岗位类型。

我们不需要is_admin() 检查这里,因为这些过滤器only run 在前端。