Поддержка Проблемы и решения Работа с functions.php и изображениями постов

  • Решено kirpich1

    (@kirpich1)


    Требуется:
    Вывести атрибут itemprop=»image» у картинок из галерей в постах с помощью functions.php.

Просмотр 15 ответов — с 1 по 15 (всего 26)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    function add_itemprop_to_image_attributes( $atts ) {
    	$atts['itemprop'] = 'image';
    	return $atts;
    }
    add_filter( 'wp_get_attachment_image_attributes', 'add_itemprop_to_image_attributes' );

    Sergey Biryukov

    Да, работает, как нужно. Большое спасибо.

    А Вы не в курсе, как добавляемый <style type=’text/css’>тут css code от галерей</style> грузить в голове страницы? А то он сейчас добавляется прямо перед галерей и код получается некрасивым + валидацию не проходит такое дело.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Отключить вывод можно так:

    add_filter( 'use_default_gallery_style', '__return_false' );

    Если тема поддерживает HTML5, он отключается автоматически.

    add_filter( ‘use_default_gallery_style’, ‘__return_false’ );

    Спасибо за ответ. Но мне нужно не отключить стили, а перенести их в head.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно скопировать эти стили в файл style.css или header.php и затем отключить.

    Можно скопировать эти стили в файл style.css или header.php и затем отключить.

    Там стили генерируются в зависимости от id галереи.

    Вот код из media.php:

    if ( apply_filters( 'use_default_gallery_style', ! $html5 ) ) {
    		$gallery_style = "
    		<style type='text/css'>
    			#{$selector} {
    				margin: auto;
    			}
    			#{$selector} .gallery-item {
    				float: {$float};
    				margin: 0;
    				text-align: center;
    				width: {$itemwidth}%;
    			}
    			#{$selector} img {
    				border: 2px solid #cfcfcf;
    			}
    			#{$selector} .gallery-caption {
    				margin-left: 0;
    			}
    			/* see gallery_shortcode() in wp-includes/media.php */
    		</style>\n\t\t";
    	}

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Там стили генерируются в зависимости от id галереи.

    Вы можете изменить стандартный вывод шорткода галереи с помощью фильтра post_gallery.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Там стили генерируются в зависимости от id галереи.

    Их можно сделать более общими, используя класс .gallery вместо ID.

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Их можно сделать более общими, используя класс .gallery вместо ID.

    Дополню. Для width: {$itemwidth}%; тогда можно добавить что-то вроде этого:

    .gallery-item {
        width: 100%;
    }
    .gallery-columns-2 .gallery-item {
        max-width: 50%;
    }
    
    .gallery-columns-3 .gallery-item {
        max-width: 33.33%;
    }
    
    .gallery-columns-4 .gallery-item {
        max-width: 25%;
    }
    
    .gallery-columns-5 .gallery-item {
        max-width: 20%;
    }
    
    .gallery-columns-6 .gallery-item {
        max-width: 16.66%;
    }
    
    .gallery-columns-7 .gallery-item {
        max-width: 14.28%;
    }
    
    .gallery-columns-8 .gallery-item {
        max-width: 12.5%;
    }
    
    .gallery-columns-9 .gallery-item {
        max-width: 11.11%;
    }

     
    float: {$float}; определяется с помощью функции is_rtl(), поэтому для русскоязычных сайтов будет float: left;

    denisco, спасибо, это действительно помогло.
    А как можно решить проблему с валидацией html кода, когда нет подписи под картинкой?
    Валидатор выдаёт:

    Element dl is missing a required instance of child element dd

    Я так понимаю, WordPress при создании галереи не создаёт дочернего элемента описания <dd>, если подписи под картинкой не задано из админ-панели. Вот как такое можно решить? На моём сайте подписи под картинками не нужны как раз 🙂

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Вот как такое можно решить?

    Попробуйте добавить в functions.php строку

    add_theme_support('html5', 'gallery');

    Тогда WordPress должен начать использовать html5-теги для галереи

    'itemtag'    => $html5 ? 'figure'     : 'dl',
    'icontag'    => $html5 ? 'div'        : 'dt',
    'captiontag' => $html5 ? 'figcaption' : 'dd',

    add_theme_support('html5', 'gallery');

    Не спасло)

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Не спасло)

    Что именно? Всё равно выводятся теги dl, dt, dd?

    Полная версия выглядит так:

    add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption' ) );

    Что именно? Всё равно выводятся теги dl, dt, dd?

    Вот именно, что тэг <dd> не выводится, если он пустой. А его надо выводить при любых обстоятельствах. Хоть он пустой, хоть нет.

    add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption' ) );

    А вот этот вариант помог. Теперь оно в блоках div. Спасибо большое!

Просмотр 15 ответов — с 1 по 15 (всего 26)
  • Тема «Работа с functions.php и изображениями постов» закрыта для новых ответов.