Como eu filtra a descrição do trecho do metabox no admin?

4

Desejo alterar o padrão "Trechos são resumos manuais opcionais do seu conteúdo que podem ser usados em seu tema. Saiba mais sobre trechos manuais". help text abaixo da área de entrada Excerpt para algo mais significativo para o meu tipo de postagem personalizada.

Eu fiz algo parecido com o Post Title, usando um filtro de "tradução", mas como eu faria isso com o trecho da postagem?

Aqui está o meu código atual:
add_filter('gettext', 'custom_rewrites', 10, 4);
function custom_rewrites($translation, $text, $domain) {

    global $post;

    $translations = &get_translations_for_domain($domain);
    $translation_array = array();

    switch ($post->post_type) {
        case 'model':
            $translation_array = array(
                'Enter title here' => 'Enter model name here',
                'Excerpt' => "Byline",
                'Excerpts are optional hand-crafted summaries of your content that can be used in your theme.' => "Foobar"
            );
            break;
    }

    if (array_key_exists($text, $translation_array)) {
        return $translations->translate($translation_array[$text]);
    }

    return $translation;
}

A terceira tradução não está funcionando?

    
por Amanda 07.02.2011 / 14:18

3 respostas

5

Esta descrição é gerada pela função post_excerpt_meta_box() e não é passada através de nenhum filtro explícito. No entanto, ele é ecoado pela função _e() relacionada à tradução e, portanto, passa pelo filtro gettext (que da sua pergunta você já estão familiarizados com).

Quanto a limitá-lo ao seu CPT, acho que o tipo de postagem atual em admin é mantido na variável global $post_type que você pode verificar.

    
por Rarst 07.02.2011 / 15:32
1

Resposta tardia

Somente filtros de tradução

Existem filtros padrão para o título e o conteúdo, mas nenhum para as janelas do trecho. Então você basicamente tem opções: Remova a meta box padrão e adicione uma nova (alterada) OU filtre a string através do filtro gettext .

Meta Box

Você basicamente conhece o conceito de remover uma meta box (se não, basta procurar neste site por ele). Em seguida, basta adicionar uma nova caixa meta que é exatamente a mesma, mas com uma interface do usuário levemente alterada em seu retorno de chamada personalizado.

Aqui está o original do core como referência:

function post_excerpt_meta_box($post) {
?>
<label class="screen-reader-text" for="excerpt"><?php _e('Excerpt') ?></label><textarea rows="1" cols="40" name="excerpt" tabindex="6" id="excerpt"><?php echo $post->post_excerpt; // textarea_escaped ?></textarea>
<p><?php _e('Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href="http://codex.wordpress.org/Excerpt" target="_blank">Learn more about manual excerpts.</a>'); ?></p>
<?php
}

Gettext

O ponto com isso é que esse filtro é acionado para cada uma das cadeias traduzíveis na interface do usuário (que é muito). No plugin abaixo, você verá como alterar o espaço reservado para o título padrão dos tipos de postagem, o conteúdo padrão e como conectar o mais tarde possível para alterar essa sequência - e, em seguida, im. remova o filtro para que ele não reduza a velocidade de todos os filtros posteriores.

<?php
/** Plugin Name: (#72418) "kaiser" Alter Post Type UI strings */

if ( ! class_exists( 'WPSE72418_alter_ptui_strings' ) )
{
    add_action( 'plugins_loaded', array( 'WPSE72418_alter_ptui_strings', 'init' ) );
class WPSE72418_alter_ptui_strings
{
    static protected $instance;

    public $post_type = 'post';

    public $to_replace = 'Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href="http://codex.wordpress.org/Excerpt" target="_blank">Learn more about manual excerpts.</a>';

    static public function init()
    {
        null === self :: $instance AND self :: $instance = new self;
        return self :: $instance;
    }

    public function __construct()
    {
        add_action( 'init', array( $this, 'add_post_type' ) );

        add_filter( 'enter_title_here', array( $this, 'alter_title_string' ), 10, 2 );

        add_filter( 'default_content', array( $this, 'add_editor_default_content' ) );

        add_action( 'admin_menu', array( $this, 'add_excerpt_note_filter' ) );
    }

    public function alter_title_string( $title, $post )
    {
        if ( $this->post_type !== $post->post_type )
            return $title;

        return $title = __( 'Enter TITLE name here', 'your_textdomain' );
    }

    public function add_editor_default_content( $content )
    {
        if ( $this->post_type !== get_current_screen()->post_type )
            return $content;

        return __( 'Enter the POST TYPES long description here.', 'your_textdomain' );
    }

    public function add_excerpt_note_filter( $post )
    {
        add_filter( 'gettext', array( $this, 'alter_excerpt_mb_note' ), 10, 3 );
    }

    public function alter_excerpt_mb_note( $l10n, $string, $domain )
    {
        // Remove when not on the needed post type page
        if (
            ! is_null( get_current_screen() )
            AND $this->post_type !== get_current_screen()->post_type 
            )
        {
            remove_filter( current_filter(), array( $this, __FUNCTION__ ) );
            return;
        }

        // Remove when done
        if ( $this->to_replace === $string )
        {
            remove_filter( current_filter(), array( $this, __FUNCTION__ ) );
            return __( 'NEW FOOTNOTE', 'your_textdomain' );
        }

        return $l10n;
    }
} // END Class WPSE72418_alter_ptui_strings

} // endif;
    
por kaiser 13.11.2012 / 12:54
-2

Obrigado por isso. Também é possível nos dias de hoje aplicar um filtro ao prompt Title usando enter_title_here. Aproveite!

add_filter ('enter_title_here', your_filter);

Como seria de esperar.

    
por Alex 23.03.2011 / 13:49