Настройки галереи Изменяют доступные столбцы


Есть ли фильтр, который изменяет количество доступных столбцов на экране настроек галереи. Я говорю о:

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

В строке wp-includes/media-template.php 359-369 ( Wordpress v3.5)

Что я в основном хочу сделать, так это изменить $i <= 9; на $i <= 5; в условии выхода из цикла.

Я думаю, что если я просто сделаю это, он будет удален со следующим обновлением Wordpress.

Спасибо за вашу помощь

Евгений

Author: eugene.kud, 2013-01-20

2 answers

Краткий ответ

Как бы все ни было просто: Нет, это невозможно. Вся часть жестко закодирована.

Длинный ответ (не рекомендуется этого делать)

Возможно, вы могли бы перейти в фильтры esc_html и attribute_escape и просто вернуть там пустые *), но поскольку это довольно общие имена, они, возможно, также повлияют на другие результаты фильтрации и, следовательно, нарушат другие вещи.

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

Поскольку escape-фильтры присутствуют почти везде, на самом деле это не так рекомендуется использовать их в производстве (например, с помощью gettext-фильтров). Они срабатывают при каждом побеге (их сотни на странице) и могут действительно замедлить работу вашей системы.

Внутренние компоненты и производительность

Чтобы справиться с этим, я использовал фильтр, который запускается последним перед выводом HTML-скрипта, чтобы добавить обратные вызовы как можно позже. Затем я прерываю как можно чаще, чтобы не запускать фильтры этих плагинов на любой другой странице, кроме экрана "добавить новый". После проверки исходных файлов HTML, я вижу, что в версии 3.5 у нас есть только два вызова esc_attr_e() (которые внутренне запускают esc_attr и, следовательно, наши фильтры), но с двумя строками, поэтому мы можем безопасно прервать их. Когда мы, наконец, достигаем наших фильтров, я возвращаю пустую строку, а затем мгновенно удаляю фильтр, чтобы не запускать последующие вызовы.

Это лучшее, чего вы можете достичь.

РЕДАКТИРОВАТЬ

Подумав об этом, я использовал кэширование ob - не красиво, но это должно работать (если я не считал неправильно). Примечание: Это кодируется во время написания и обдумывания, поэтому оно не тестируется. Вам придется подтвердить, работает это или нет.

Заключительное примечание: Вам придется перепроверять этот плагин после каждой следующей версии (начиная с WP v3.6), чтобы убедиться, что разметка не изменилась и она по-прежнему работает должным образом.

*) Это оставило бы вас с пустыми строками. Другими словами: они все равно были бы там, но нефункциональные и пустые (без строки).

 0
Author: kaiser, 2013-01-20 15:54:13

Может быть или не быть крючок фильтра , но вы можете ограничить количество доступных столбцов на экране настроек галереи с помощью стилей, в частности CSS администратора.

Чтобы выбрать 1-5 столбцов, добавьте это в свою таблицу стилей администратора WordPress. (Возможно, вам придется его создать.)

Стиль

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

Функция

Скажите WordPress, чтобы он включил это с помощью wp_enqueue_style в вашей очереди 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

Примечания

Если <select> <option> тега(ов) там нет, его нельзя выбрать.* В приведенном выше примере все варианты, начиная с 6-го ребенка, являются целевыми. Обратите внимание, что это будет ограничено только классом .columns в классе .gallery-настройки, поэтому можно с уверенностью сказать, что это, вероятно, не вызовет никаких проблем с другими параметрами выбора администратора.

Для моего проекта я выбрал только 9-й вариант с nth-child(9). Это потому, что я использую Блочная сетка фонда Zurb с выбором из 1-8 столбцов. Выбор 9 просто нарушает компоновку.

С этим размещением в таблице стилей нет необходимости беспокоиться о потере чего-либо после обновления.


* Выбор будет ограничен, но имейте в виду, что пользователь все еще может установить номер столбца с помощью опции текстового редактора. [gallery columns="9" ids="113,107,92,57,45,44"] Но если вы умны, вы, вероятно, все равно отключили опцию текстового редактора для пользователей.

 1
Author: nic, 2017-09-14 05:47:36