web-dev-qa-db-fra.com

Comment filtrer la description de l'extrait metabox dans admin?

Je souhaite modifier la valeur par défaut "Les extraits sont des résumés facultatifs de votre contenu, conçus à la main et pouvant être utilisés dans votre thème. En savoir plus sur les extraits manuels." texte d'aide situé sous la zone de saisie Extrait pour quelque chose de plus significatif pour mon type de message personnalisé.

J'ai fait quelque chose de similaire avec Post Title, en utilisant un filtre de "traduction", mais comment pourrais-je procéder avec l'extrait de post?

Voici mon code actuel:
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;
}

La troisième traduction ne fonctionne pas?

4
Amanda

Cette description est générée par la fonction post_excerpt_meta_box() et ne passe par aucun filtre explicite. Il est cependant répercuté par la fonction _e() relative à la traduction et passe donc à travers le filtre gettext (que vous connaissez déjà de votre question).

En ce qui concerne la limitation à votre CPT, je pense que le type de publication actuel dans admin est conservé dans la variable globale $post_type que vous pouvez vérifier.

5
Rarst

Réponse tardive

Filtres de traduction uniquement

Il existe des filtres par défaut pour le titre et le contenu, mais aucun pour les fenêtres d'extraits. Donc, vous avez essentiellement les options suivantes: Supprimer la boîte de méta par défaut et ajouter un nouveau (modifié) un OR filtrer la chaîne via le filtre gettext.

Meta Box

Vous connaissez fondamentalement le concept de suppression d'une méta-boîte (sinon, cherchez-le simplement sur ce site). Ensuite, ajoutez simplement une nouvelle boîte à méta identique, mais avec une interface utilisateur légèrement modifiée dans votre rappel personnalisé.

Voici l'original du noyau comme référence:

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

Le fait est que ce filtre se déclenche pour chaque chaîne pouvant être traduite dans l'interface utilisateur (ce qui est beaucoup). Dans le plugin ci-dessous, vous verrez comment modifier l’espace réservé du titre par défaut des types de publication, le contenu par défaut et comment s’accrocher le plus tard possible pour modifier cette chaîne - puis im. retirez le filtre pour qu'il ne ralentisse pas à chaque filtre ultérieur.

<?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