Настройки галереи Изменяют доступные столбцы
Есть ли фильтр, который изменяет количество доступных столбцов на экране настроек галереи. Я говорю о:
<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.
Спасибо за вашу помощь
Евгений
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), чтобы убедиться, что разметка не изменилась и она по-прежнему работает должным образом.
*) Это оставило бы вас с пустыми строками. Другими словами: они все равно были бы там, но нефункциональные и пустые (без строки).
Может быть или не быть крючок фильтра , но вы можете ограничить количество доступных столбцов на экране настроек галереи с помощью стилей, в частности 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');
Примечания
Если <select>
<option>
тега(ов) там нет, его нельзя выбрать.* В приведенном выше примере все варианты, начиная с 6-го ребенка, являются целевыми. Обратите внимание, что это будет ограничено только классом .columns в классе .gallery-настройки, поэтому можно с уверенностью сказать, что это, вероятно, не вызовет никаких проблем с другими параметрами выбора администратора.
Для моего проекта я выбрал только 9-й вариант с nth-child(9)
. Это потому, что я использую Блочная сетка фонда Zurb с выбором из 1-8 столбцов. Выбор 9 просто нарушает компоновку.
С этим размещением в таблице стилей нет необходимости беспокоиться о потере чего-либо после обновления.
* Выбор будет ограничен, но имейте в виду, что пользователь все еще может установить номер столбца с помощью опции текстового редактора.
[gallery columns="9" ids="113,107,92,57,45,44"]
Но если вы умны, вы, вероятно, все равно отключили опцию текстового редактора для пользователей.