Dzisiaj na jednej z grup supoprtowych pojawiło się następujące pytanie:

Czy da się jakoś zmienić domyślne ustawienia galerii? Chciałbym mieć na start ustawione 4 kolumny oraz linkowanie do pliku, a nie strony załącznika.

No właśnie, da się? Oczywiście, że się da, a potrzebujemy w tym celu poniższych dwóch funkcji:

function prefiks_print_media_templates() {
    ?>
    <script>
        jQuery(document).ready(function() {
            _.extend(wp.media.galleryDefaults, {
                columns: '4',
                link: 'file',
            });
        });
    </script>
    <?php
}
add_action('print_media_templates', 'prefiks_print_media_templates');

function prefiks_shortcode_atts_gallery($out, $pairs, $atts) {
    if ( ! array_key_exists('columns', $atts) || ! intval( $atts['columns'] ) ) {
        $out['columns'] = 4;
    }

    if ( ! array_key_exists('link', $atts) ) {
        $out['link'] = 'file';
    }

    return $out;
}
add_filter('shortcode_atts_gallery', 'prefiks_shortcode_atts_gallery', 10, 3);

Dodatkowe warianty i pytania

Naprawdę potrzebuję do tego aż dwóch funkcji?

Niestety tak. Pierwsza z nich prefiks_print_media_templates dba o to, aby w edytorze galerii pojawiały się poprawne wartości jako domyślne. Dba ona także o to, aby domyślne wartości nie były wstawiane w treść wpisu (w końcu są domyślne). Ale ponieważ te wartości nie są zapisywane, to WordPress wygeneruje niepoprawny kod galerii, bo przyjmie tam sobie własne domyślne wartości, a nie nasze. I tu z pomocą przychodzi właśnie druga funkcja, która podmieni te wartości na nasze.

Ktoś podpowiedział mi, że mogę użyć filtru post_gallery i stworzyć własny kod galerii. Czy to prawda?

Tak, rzeczywiście można zrobić to i w ten sposób. Ale… My przecież chcemy tylko zmienić domyślne ustawienia, a nie implementować całą galerię od nowa i brać na siebie odpowiedzialność za jej kod HTML. Rozwiązanie oparte na post_gallery nijak nie wpłynie też na sam edytor galerii, czyli galeria będzie zachowywać się niespójnie – w ustawieniach będzie widoczne „3 kolumny”, a galeria renderować będzie się w czterech.