web-dev-qa-db-fra.com

Paramètres de la galerie Modifier les colonnes disponibles

Existe-t-il un crochet de filtre qui modifie le nombre de colonnes disponibles dans l'écran des paramètres de la galerie? Je parle de la:

<label class="setting">
    <span><?php _e('Columns'); ?></span>
    <select class="columns" name="columns"
        data-setting="columns">
        <?php for ( $i = 1; $i <= 9; $i++ ) : ?>
            <option value="<?php echo esc_attr( $i ); ?>" <?php selected( $i, 3 ); ?>>
                <?php echo esc_html( $i ); ?>
            </option>
        <?php endfor; ?>
    </select>
</label>

dans wp-includes/media-template.php ligne 359-369 (Wordpress v3.5)

Ce que je veux fondamentalement faire est de changer $i <= 9; à $i <= 5; dans la condition de sortie de la boucle.

Je suppose que si je viens de le faire, il sera supprimé avec la prochaine mise à jourWordpress.

Merci de votre aide

Eugene

3
eugene.kud

Réponse courte

Aussi simples que soient parfois les choses: non, ce n'est pas possible. La partie entière est codée en dur.

Réponse longue (non recommandé)

Vous pourriez peut-être sauter dans les filtres esc_html et attribute_escape et simplement y retourner vide *), mais comme il s’agit de noms génériques, ils pourraient aussi interférer avec d’autres résultats de filtrage et casser d’autres choses.

<?php
/* Plugin Name: (#82379) Empty Media options */
add_filter( 'image_size_names_choose', 'wpse82379_esc_attr' );
function wpse82379_trigger_filter( $sizes )
{
    if ( 'post' !== get_current_screen()->post )
        return $safe_text;

    add_filter( 'attribute_escape', 'wpse82379_esc_attr', 10, 2 );
    add_filter( 'esc_html', 'wpse82379_esc_attr', 10, 2 );

    return $sizes;
}
function wpse82379_esc_attr( $safe_text, $text )
{
    if ( ! in_array( absint( $text ), range( 6, 9 ) ) )
        return $safe_text;

    static $counter = 0;
    $static++;

    // 
    if ( 1 === $static )
    {
        ob_start();
        return $safe_text;
    }
    if ( in_array( $static, array( 7, 9 ) ) )
    {
        remove_filter( current_filter(), __FUNCTION__ );
        if ( 'esc_html' === current_filter() )
        {
            $html = ob_get_contents();
            ob_end_clean();
            // In case you want to alter the layout, rework $html and return it
            return '';
        }
    }

    return $safe_text;
}

Comme les filtres d'échappement sont présents presque partout, il n'est pas vraiment recommandé de les utiliser en production (comme avec les filtres gettext). Ils se déclenchent à chaque sortie (plusieurs centaines par page) et peuvent réellement ralentir votre système.

Internals et performance

Pour remédier à cela, j'ai utilisé le filtre qui s'exécute en dernier avant la sortie du script HTML pour ajouter les rappels le plus tard possible. Ensuite, j'abandonne le plus souvent possible pour ne pas déclencher les filtres de ces plugins sur une autre page que l'écran "ajouter un nouveau" message. Après avoir vérifié les fichiers source HTML, je constate avec la version 3.5 que nous n’avons que deux appels pour esc_attr_e() (ce qui déclenche en interne esc_attr et donc nos filtres), mais avec deux chaînes afin que nous puissions y renoncer en toute sécurité. Lorsque nous atteignons enfin nos filtres, je retourne une chaîne vide et le supprime instantanément pour ne pas déclencher d'appels ultérieurs.

C'est le meilleur que vous puissiez réaliser.

MODIFIER

Après avoir réfléchi, j’ai utilisé ob caching - pas beau, mais il devrait fonctionne (sauf si j’ai mal calculé). Remarque: Ceci est codé lors de l'écriture et de la réflexion, il n'est donc pas testé. Vous devrez confirmer si cela fonctionne ou non.

Note finale: vous devrez revérifier ce plugin après chaque version suivante (en commençant par WP v3.6) pour vous assurer que le balisage n'a pas changé et qu'il fonctionne toujours comme prévu.

*) Cela vous laisserait avec des chaînes vides. En d'autres termes: ils seraient toujours là mais non fonctionnels et vides (pas de chaîne).

0
kaiser

Il peut y avoir ou non un crochetfilter, mais vous pouvez limiter le nombredes colonnes disponibles dans l'écran des paramètres de la galerieen utilisant des styles, en particulier le CSS admin.

Pour obtenir des choix de 1 à 5 colonnes, ajoutez ceci à votre feuille de style d'administrateur WordPress. (Vous devrez peut-être en créer un.)

Style

.gallery-settings .columns option:nth-child(n+6) {
    display: none;
    }

Une fonction

Dites à WordPress de le prendre en utilisant wp_enqueue_style dans votre fichier de mise en file d'attente PHP.

function wp_admin_styles() {
    wp_enqueue_style('admin-styles', get_template_directory_uri().'/wordpress-admin.css');
}
add_action('admin_enqueue_scripts', 'wp_admin_styles');

 enter image description here 

Remarques

Si la ou les balises <select><option> ne sont pas présentes, vous ne pouvez pas choisir. * Dans l'exemple ci-dessus, toutes les options commençant par le 6ème enfant sont ciblées. Notez que cela sera limité à la classe .columns d'une classe .gallery-settings. Il est donc prudent de dire que cela ne posera probablement aucun problème avec les autres options de sélection d'administrateur.

Pour mon projet, je n'ai ciblé que la 9ème option avec nth-child(9). C'est parce que j'utilise la grille de blocs de la Fondation Zurb avec des choix de 1 à 8 colonnes. Choisir 9 ne fait que briser la mise en page.

Dans cette feuille de style, vous n'avez plus à craindre de perdre quoi que ce soit après une mise à jour.


* Le choix sera limité, mais gardez à l'esprit que l'utilisateur peut toujours définir le numéro de colonne à l'aide de l'option de l'éditeur de texte. [gallery columns="9" ids="113,107,92,57,45,44"] Mais si vous êtes intelligent, vous avez probablement de toute façon désactivé l'option de l'éditeur de texte pour les utilisateurs.

1
nic