ti-enxame.com

Como faço para filtrar a descrição do trecho do metabox no admin?

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 Custom Post Type.

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

Aqui está 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?

4
Amanda

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 relacionada à tradução _e() e, assim, passa pelo filtro gettext (que, da sua pergunta, você já conhece).

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.

5
Rarst

Resposta tardia

Apenas 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 as opções: Remover a meta box padrão e adicionar uma nova (alterada) uma OR filtrar 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 inserir 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;
1
kaiser