wake-up-neo.net

Galerieeinstellungen Ändern Sie die verfügbaren Spalten

Gibt es einen Filter-Hook, der die Anzahl der verfügbaren Spalten im Bildschirm mit den Galerieeinstellungen ändert? Ich spreche über die:

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

in wp-includes/media-template.php Zeile 359-369 (Wordpress v3.5)

Was ich im Grunde tun möchte, ist, $i <= 9; in $i <= 5; in Schleife Exit-Bedingung zu ändern.

Ich vermute, wenn ich es nur tue, wird es mit dem nächstenWordpressUpdate verworfen.

Danke für Ihre Hilfe

Eugene

3
eugene.kud

Kurze Antwort

So einfach es manchmal ist: Nein, das ist nicht möglich. Der ganze Teil ist hart codiert.

Lange Antwort (nicht zu empfehlen)

Sie könnten vielleicht in die Filter esc_html und attribute_escape springen und dort einfach leer zurückkehren *), aber da dies ziemlich generische Namen sind, würden Sie möglicherweise auch andere Filterergebnisse stören und daher andere Dinge beschädigen.

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

Da die Escape-Filter fast überall vorhanden sind, ist es nicht wirklich empfehlenswert, sie in der Produktion zu verwenden (wie bei den Gettext-Filtern). Sie werden bei jedem Escape-Vorgang ausgelöst (das sind Hunderte pro Seite) und können Ihr System wirklich verlangsamen.

Interna und Leistung

Um dem entgegenzuwirken, habe ich den Filter verwendet, der zuletzt vor der HTML-Skriptausgabe ausgeführt wird, um die Rückrufe so spät wie möglich hinzuzufügen. Dann brich ich so oft wie möglich ab, um diese Plugins-Filter auf keiner anderen Seite als dem Post "Add New" -Bildschirm auszulösen. Nachdem ich den HTML-Code der Quelldateien überprüft habe, kann ich feststellen, dass wir mit Version 3.5 nur zwei Aufrufe für esc_attr_e() (die intern esc_attr und damit unsere Filter auslösen) haben, aber mit zwei Zeichenfolgen, sodass wir diese sicher abbrechen können. Wenn wir endlich unsere Filter erreichen, gebe ich eine leere Zeichenfolge zurück und entferne den Filter sofort, um keine späteren Aufrufe auszulösen.

Dies ist das Beste, was Sie erreichen können.

BEARBEITEN

Nachdem ich darüber nachgedacht hatte, benutzte ich Ob-Caching - nicht schön, aber essolltefunktionieren (außer ich habe falsch gezählt). Hinweis: Dies wird beim Schreiben und Denken codiert, daher wird es nicht getestet. Sie müssen bestätigen, ob es funktioniert oder nicht.

Letzter Hinweis: Sie müssen dieses Plugin nach jeder folgenden Version (beginnend mit WP v3.6) erneut überprüfen, um sicherzustellen, dass sich das Markup nicht geändert hat und es weiterhin wie erwartet funktioniert.

*) Dies würde Sie mit leeren Zeichenfolgen verlassen. Mit anderen Worten: Sie wären immer noch da, aber nicht funktionsfähig und leer (kein String).

0
kaiser

Möglicherweise gibt es einenFilter-Hook, aber Sie können dieAnzahl der verfügbaren Spalten im Bildschirm "Galerieeinstellungen"durch die Verwendung von Stilen einschränken - speziell des Admin-CSS.

Um eine Auswahl von 1-5 Spalten zu erzielen, fügen Sie diese Ihrem WordPress-Admin-Stylesheet hinzu. (Möglicherweise müssen Sie einen erstellen.)

Stil

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

Funktion

Weisen Sie WordPress an, dies mit wp_enqueue_style in Ihrer Enqueue-Datei PHP abzurufen.

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 

Anmerkungen

Wenn die <select><option>-Tags nicht vorhanden sind, können sie nicht ausgewählt werden. * Im obigen Beispiel werden alle Optionen ab dem 6. Kind ausgewählt. Beachten Sie, dass dies nur auf die .columns-Klasse in einer .gallery-settings-Klasse beschränkt ist. Daher ist es ziemlich sicher zu sagen, dass dies wahrscheinlich keine Probleme mit anderen Admin-Auswahloptionen verursacht.

Für mein Projekt habe ich nur die 9. Option mit nth-child(9) ausgewählt. Das liegt daran, dass ich Zurb Foundation's Block-Grid mit einer Auswahl von 1-8 Spalten verwende. Wenn Sie 9 auswählen, wird das Layout nur unterbrochen.

Wenn Sie sich in einem Stylesheet befinden, müssen Sie sich keine Sorgen mehr machen, dass Sie nach einem Update etwas verlieren.


* Die Auswahl ist begrenzt. Beachten Sie jedoch, dass der Benutzer die Spaltennummer möglicherweise weiterhin mit der Texteditor-Option festlegen kann. [gallery columns="9" ids="113,107,92,57,45,44"] Aber wenn Sie schlau sind, haben Sie wahrscheinlich die Texteditor-Option für Benutzer sowieso deaktiviert.

1
nic