web-dev-qa-db-fra.com

Le meilleur moyen de filtrer le texte de l'image en vedette pour un type de publication personnalisé?

J'essaie de modifier les liens de texte "Définir l'image sélectionnée", "Supprimer l'image sélectionnée" et "Utiliser l'image sélectionnée" d'un type de message personnalisé pour mon plugin Meteor Slides .

J'ai trouvé le crochet de filtre "admin_post_thumbnail_html" et je suis arrivé avec un code qui va changer "Définir l'image sélectionnée" en "Définir l'image de la diapositive" pour le type de publication de diapositive uniquement:

    if ((isset($_GET['post_type']) && $_GET['post_type'] == 'slide') || (isset($post_type) && $post_type == 'slide')) {

    add_filter( 'admin_post_thumbnail_html', 'meteorslides_set_featured', 9999, 1 );

    function meteorslides_set_featured( $content ) {

        return str_replace( 'Set featured image', 'Set slide image', $content );

    }

}

J'ai essayé la même chose pour "Supprimer l'image sélectionnée" et cela n'a pas fonctionné, mais je peux utiliser ce code pour apporter cette modification aux types all post:

    add_filter( 'admin_post_thumbnail_html', 'meteorslides_remove_featured', 9999, 1 );

function meteorslides_remove_featured( $content ) {

    return str_replace( 'Remove featured image', 'Remove slide image', $content );

}

Quelqu'un a-t-il des idées sur les raisons pour lesquelles filtrer "Définir l'image sélectionnée" se comporterait différemment de "Supprimer l'image sélectionnée"?

Changer "Utiliser comme image sélectionnée" semble être un peu plus compliqué, il n'y a pas de filtre pour cela. Mais j’ai fait trouver un ticket dans Trac où une autre personne essayait de faire la même chose, et il a été suggéré de filtrer la chaîne de traduction.

Cette solution a plutôt bien fonctionné. J'ai pu modifier le texte "Utiliser comme image sélectionnée", mais encore une fois, il s'applique à tous les types de publication et je ne suis pas sûr de savoir comment le réduire:

    add_filter( 'gettext', 'meteorslides_use_featured', 9999, 4 );

function meteorslides_use_featured( $translation, $text, $domain ) {

    $translations = &get_translations_for_domain( $domain );

    if ( $text == 'Use as featured image' ) {

        return $translations->translate( 'Use as slide image' );

    }

    return $translation;

}

La fenêtre de média superposée ne semble pas "savoir" que je la charge à partir d'un certain type de publication. Je ne suis donc pas sûr que ce changement soit réalisable.

J'ai trouvé une réponse ici qui montrait comment changer ces liens avec jQuery . Je préférerais utiliser des filtres, mais si je pouvais trouver un moyen de limiter cela à un type de message, ça irait aussi!

J'ai regardé d'autres plugins qui utilisent des images en vedette, mais je n'ai pas réussi à en trouver qui aient changé toutes ces chaînes. Est-ce que quelqu'un a réussi ça?

3
JLeuze

Que vous empruntiez la route PHP ou jQuery, je vous suggère de configurer vos filtres ou de mettre en file d'attente votre code Javascript dans le hook admin_head-post[-new].php ou admin_print_scripts-post[-new].php. Là, vous pouvez être sûr que la variable globale $post_type est définie et vérifier si elle est slide. Puisque le code de vignette de publication est appelé après ces hooks, vous pouvez configurer vos filtres dans ce hook et ils seront exécutés. Quelque chose comme ça:

add_action( 'admin_head-post-new.php', 'wpse4270_add_filters_for_slide' );
add_action( 'admin_head-post.php', 'wpse4270_add_filters_for_slide' );
function wpse4270_add_filters_for_slide()
{
    if ( 'slide' == $GLOBALS['post_type'] ) {
        add_filter( 'admin_post_thumbnail_html', 'meteorslides_set_featured', 9999, 1 );
        add_filter( 'admin_post_thumbnail_html', 'meteorslides_remove_featured', 9999, 1 );
        add_filter( 'gettext', 'meteorslides_use_featured', 9999, 4 );
    }
}
4
Jan Fabry

Comme l'a mentionné brasofilo, vous pouvez effectuer une opération str_replace () sur le filtre admin_post_thumbnail_html.

function changeFeaturedImageLinks($content)
{
    $content = str_replace(__('Set featured image'), __('YOUR_CUSTOM_TEXT'), $content);
    $content = str_replace(__('Remove featured image'), __('YOUR_CUSTOM_TEXT'), $content);

    return $content;
}

add_filter('admin_post_thumbnail_html', 'changeFeaturedImageLinks');
1
Christopher Lamm

Pour ce faire, je me suis d'abord connecté à l'action 'current_screen' et en déterminant si mon type de post_type était défini, puis en ajoutant le filtre. Il existe peut-être un moyen plus court, mais cela fonctionne si vous devez modifier le texte uniquement pour un type de publication donné.

public function set_featured_image_filter(){
    $screen = get_current_screen();
    if( isset($screen->post_type) && $screen->post_type == 'advertisment'){
        add_filter( 'admin_post_thumbnail_html', 'replace_featured_image_text', 10, 1);
    }
}
add_action('current_screen', 'set_featured_image_filter');

public function replace_featured_image_text( $content ) {
        return str_replace( 'Set featured image', __('Set Advertisment image', $this->rns_slingshot_plugin), $content );
    }
0
rfair404