Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Поменять placeholder вместо картинок для категорий

Тема в разделе "Вопросы, советы и доработки.", создана пользователем Stork.71, 24 май 2016.

  1. Stork.71

    Stork.71 Местный

    Сообщения:
    1.036
    Симпатии:
    254
    Баллы:
    83
    Когда мы не подгружаем для товаров или категорий картинки-миниатюры, вместо них выводится замещающее изображение - placeholder. Тут 2 вопроса:

    1. Необходимо поменять это изображение в целом. Очевидно конечно, что можно подменить картинку ...\wp-content\plugins\woocommerce\assets\images\placeholder.png . Но такое изменение - одноразовое, до первой обновы. Хочется залить свой plsceholder в дочернюю тему и прописать ссылку на него. Только как это сделать?

    2. Как поменять placeholder только для категорий, то есть грубо говоря сделать, чтобы у меня на сайте было 2 разных placeholder'а: один вылазит когда нет картинки товара, а другой - когда нет картинки категории. (я в принципе даже подумываю не делать отдельных картинок для категорий, а обозначить их просто какой-то общей абстрактной картинкой)
     
  2. -Vladislav-

    -Vladislav- Местный

    Сообщения:
    212
    Симпатии:
    50
    Баллы:
    28
    Док для смены placeholder
    https://docs.woothemes.com/document/change-the-placeholder-image/
    Это для категорий
    PHP:
    add_action'init''custom_placeholder' );
    function 
    custom_placeholder() {
    if ( 
    is_product_category() ){
    add_filter('woocommerce_placeholder_img_src','custom_placeholder_img');

        function 
    custom_placeholder_img($src) {
        
    $upload_dir wp_upload_dir();
        
    $uploads untrailingslashit$upload_dir['baseurl'] );
        
    $src $uploads '/your/directory/custom_placeholder.jpg';
        return 
    $src;
        }
      }
    }
     
    • Нравится Нравится x 2
  3. Stork.71

    Stork.71 Местный

    Сообщения:
    1.036
    Симпатии:
    254
    Баллы:
    83
    Ага, я ж дурак сразу не полез на англоязычных ресурсах искать :) Уже нашел этот и еще кучу вариантов. Завтра перепробую - поотписываюсь. :)
     
  4. Stork.71

    Stork.71 Местный

    Сообщения:
    1.036
    Симпатии:
    254
    Баллы:
    83
    Различных сниппетов для смены placeholder'а можно найти много.

    Прежде всего - родной сниппет из доков woo. Картинку надо заливать в родную папку uploads (или прятать глубже вручную, или через стандартную галерею) wordpress'а.
    PHP:
    /*
    * goes in theme functions.php or a custom plugin. Replace the image filename/path with your own :)
    *
    **/
    add_action'init''custom_fix_thumbnail' );
    function 
    custom_fix_thumbnail() {
      
    add_filter('woocommerce_placeholder_img_src''custom_woocommerce_placeholder_img_src');
       
        function 
    custom_woocommerce_placeholder_img_src$src ) {
        
    $upload_dir wp_upload_dir();
        
    $uploads untrailingslashit$upload_dir['baseurl'] );
        
    $src $uploads '/2012/07/thumb1.jpg';
         
        return 
    $src;
        }
    }
    Дальше - еще один красивый вариант, где вместо пути к картинке подставляется ID картинки (можно посмотреть в галерее в админке).
    PHP:
    //Change the placeholder image in WooCommerce
    add_action'init''ccw_custom_woo_placeholder' );
    function 
    ccw_custom_woo_placeholder(){
        
    add_filter('woocommerce_placeholder_img_src','ccw_custom_placeholder_callback');
        function 
    ccw_custom_placeholder_callback($src){
            
    $src wp_get_attachment_url(121);
            return 
    $src;
        }
    }
    Если надо ввести любой произвольный URL, не привязываясь к галерее, то есть такой вот сниппет. Почему-то здесь фильтр не повесили на 'init', но нам важно увидеть принцип и сделать по аналогии. Вероятно, код просто не захочет работать при вызове из дочерних тем.

    PHP:
    // Add action to hook into the approp
    add_filter'woocommerce_placeholder_img_src''growdev_custom_woocommerce_placeholder'10 );
    /**
    * Function to return new placeholder image URL.
    */
    function growdev_custom_woocommerce_placeholder$image_url ) {
      
    $image_url 'http://wc23.co/wp-content/uploads/2015/08/placeholder.png';  // change this to the URL to your custom placeholder
      
    return $image_url;
    }
    Я же решил сделать немного по-своему. Считаю, что placeholder должен не теряться среди кучи залитых фоток в галерею, а лежать где-то отдельно со служебными картинками в теме, а точнее - в дочерней теме. Поэтому и код сделал под размещение в папке .../дочерняя тема/images.
    PHP:
    /** Меняем placeholder (замещающую картинку) для товаров **/

    add_action'init''custom_placeholder' );
    function 
    custom_placeholder() {
     
    add_filter('woocommerce_placeholder_img_src','custom_placeholder_img');

        function 
    custom_placeholder_img($src) {
        
    $src get_stylesheet_directory_uri() . '/images/placeholder.jpg';
        return 
    $src;
       
       }

    Дальше перешел к более интересному - замена placeholder'a для категорий. Код, найденный на просторах интернета (или в этой теме во 2 посте) не заработал. Почему - не знаю. Может, у меня старая версия woocommerce (2.2.10)? Если есть возможность, опробуйте его кто-нибудь на новой версии WC! А может он просто... неправильный и не должен был заработать? Продублирую сюда:
    PHP:
     add_action'init''custom_placeholder' );
    function 
    custom_placeholder() {
    if ( 
    is_product_category() ){
    add_filter('woocommerce_placeholder_img_src','custom_placeholder_img');

        function 
    custom_placeholder_img($src) {
        
    $upload_dir wp_upload_dir();
        
    $uploads untrailingslashit$upload_dir['baseurl'] );
        
    $src $uploads '/your/directory/custom_placeholder.jpg';
        return 
    $src;
        }
      }
    Попробовал сделать немного по-другому. Но в результате ВСЕ картинки, которые видны на страничке категории, отображаются с новым placeholder'ом (и картинки подкатегорий, и картинки товаров), а когда открываешь товар, то там остается старый дефолтный плейсхолдер. В общем, if ( is_product_category() не работает, или работает не так, как нам надо.
    PHP:
     add_action'init''custom_placeholder' );
    function 
    custom_placeholder() {

    add_filter('woocommerce_placeholder_img_src','custom_placeholder_img');

        function 
    custom_placeholder_img($src) {
        if ( 
    is_product_category() ){
        
    $upload_dir wp_upload_dir();
        
    $uploads untrailingslashit$upload_dir['baseurl'] );
        
    $src $uploads '/images/placeholder-cat.jpg';
        }
        return 
    $src;
       
      }
    Пришлось поступить грубо. Просто переписать функцию, отвечающую за вывод картинки в категориях, заменив в ней пару слов. Получилось так:
    PHP:
    /** Меняем placeholder (замещающую картинку) для категорий (переписываем родную функцию, не лучшее решение) **/

    function woocommerce_subcategory_thumbnail$category ) {
        
    $small_thumbnail_size      apply_filters'single_product_small_thumbnail_size''shop_catalog' );
        
    $dimensions                wc_get_image_size$small_thumbnail_size );
        
    $thumbnail_id              get_woocommerce_term_meta$category->term_id'thumbnail_id'true  );

        if ( 
    $thumbnail_id ) {
            
    $image wp_get_attachment_image_src$thumbnail_id$small_thumbnail_size  );
            
    $image $image[0];
        } else {
            
    $image get_stylesheet_directory_uri() . '/images/placeholder-cat.jpg';

        }
            if ( 
    $image ) {
            
    // Prevent esc_url from breaking spaces in urls for image embeds
            // Ref: http://core.trac.wordpress.org/ticket/23605
            
    $image str_replace' ''%20'$image );

            echo 
    '<img src="' esc_url$image ) . '" alt="' esc_attr$category->name ) . '" width="' esc_attr$dimensions['width'] ) . '" height="' esc_attr$dimensions['height'] ) . '" />';
        }
    }
    Данная функция (woocommerce_subcategory_thumbnail) отвечает в целом за вывод картинки, а не только placeholder'а, а поэтому сильно лезть в нее не хочется - мало ли, что там при обновах поменяется? Неправильно это. Есть идеи, как сделать все-таки по уму?
     
  5. -Vladislav-

    -Vladislav- Местный

    Сообщения:
    212
    Симпатии:
    50
    Баллы:
    28
    Да, погарячился я, - хоть этот код со stackoverflow, надо было проверить, - в общем у меня он тоже не работает.
     
    • Информативно Информативно x 1