Как получить количество колонок галереи?
Используя фильтр "post_gallery" делаю свою функцию вывода галереи.
Как мне получить количество колонок, заданных в настройках галереи при ее создании?
Дополнительно:
вот пример
function custom_gallery_function($output, $attr) { // Получаем количество колонок из аргументов галереи $columns = isset($attr['columns']) ? intval($attr['columns']) : 3; // Ваш код для вывода галереи с заданным количеством колонок // ... return $output; } add_filter('post_gallery', 'custom_gallery_function', 10, 2); |
function custom_gallery_function($output, $attr) { // Получаем количество колонок из аргументов галереи $columns = isset($attr['columns']) ? intval($attr['columns']) : 3; // Ваш код для вывода галереи с заданным количеством колонок // ... return $output; } add_filter('post_gallery', 'custom_gallery_function', 10, 2);
Ответы:
Судя по документации https://developer.wordpress.org/reference/hooks/po...
apply_filters( 'post_gallery', string $output, array $attr, int $instance ) |
apply_filters( 'post_gallery', string $output, array $attr, int $instance )
в параметре $attr передаются атрибуты, заданные в шорткоде.
Количество колонок - атрибут 'columns'. По умолчанию 3.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

В фильтре post_gallery количество колонок уже передается во втором аргументе фильтра — в массиве атрибутов галереи. Для классического шорткода галереи это ключ columns. Если пользователь не выбрал другое значение в настройках галереи, WordPress использует значение по умолчанию, обычно 3. Поэтому получать количество колонок нужно не из глобальных настроек и не из базы отдельно, а прямо из $attr.
Важно подключить фильтр с правильным количеством аргументов. У post_gallery есть не только $output и $attr, но и $instance. Если третий аргумент не нужен, его можно не использовать в логике, но при add_filter лучше указать 3 принимаемых аргумента, чтобы функция совпадала с сигнатурой фильтра и в будущем можно было различать несколько галерей на странице.
add_filter('post_gallery', 'custom_gallery_function', 10, 3); function custom_gallery_function($output, $attr, $instance) { $columns = isset($attr['columns']) ? absint($attr['columns']) : 3; if ($columns < 1) { $columns = 3; } $ids = []; if (!empty($attr['ids'])) { $ids = array_map('absint', explode(',', $attr['ids'])); } if (!$ids) { return $output; } $html = '<div class="custom-gallery custom-gallery--columns-' . esc_attr($columns) . '">'; foreach ($ids as $id) { $html .= '<div class="custom-gallery__item">'; $html .= wp_get_attachment_image($id, 'medium'); $html .= '</div>'; } $html .= '</div>'; return $html; }
Дальше это число можно использовать двумя способами: сразу добавить inline-стиль grid-template-columns или, что обычно чище, сформировать CSS-класс с количеством колонок. Например, custom-gallery--columns-2, custom-gallery--columns-3 и так далее. Тогда разметка остается простой, а внешний вид управляется CSS.
.custom-gallery { display: grid; gap: 16px; } .custom-gallery--columns-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .custom-gallery--columns-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
Отдельный нюанс: post_gallery работает с классическим шорткодом
#gallery-1 { margin: auto; } #gallery-1 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 33%; } #gallery-1 img { border: 2px solid #cfcfcf; } #gallery-1 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */. Если галерея создана блоком Gutenberg, она может выводиться как блок core/gallery и не проходить через этот фильтр. В таком случае нужно работать уже с render_block или стилями блока, а не ждать columns в post_gallery.