Ответы пользователя по тегу WordPress
  • Как удалить скачанное изображение из временной папки на сервере после генерации из неё миниатюры?

    @ligisayan Автор вопроса
    Решение было найдено на просторах интернета, которое я адаптировал под конкретно свою задачу.

    По итогу, как мне и было необходимо, в папке остаётся только одно изображение в заданных размерах thumbnail (название сохраняет оригинальное без хвостовой части с размерами) и оно же прикрепляется в качестве миниатюры к посту.

    Протестировано на актуально на сегодня версии Wordpress 6.1.1

    add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 250, 250 );
    function true_remove_default_sizes( $sizes ) {
        unset( $sizes[ 'medium' ] );
        unset( $sizes[ 'large' ] );
        unset( $sizes[ 'medium_large' ] );
        unset( $sizes[ '1536x1536' ] );
        unset( $sizes[ '2048x2048' ] );
        return $sizes;
    }
    add_filter( 'big_image_size_threshold', '__return_false' );
    
    function replace_uploaded_image($image_data) {
    
      if (!isset($image_data['sizes']['thumbnail'])) return $image_data;
    
      $upload_dir = wp_upload_dir();
      $uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
      $current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
      $thumbnail_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['thumbnail']['file'];
    
      unlink($uploaded_image_location);
    
      rename($thumbnail_image_location,$uploaded_image_location);
    
      $image_data['width'] = $image_data['sizes']['thumbnail']['width'];
      $image_data['height'] = $image_data['sizes']['thumbnail']['height'];
      unset($image_data['sizes']['thumbnail']);
    
      return $image_data;
    }
    
    add_filter('wp_generate_attachment_metadata','replace_uploaded_image');
    Ответ написан
    Комментировать
  • Почему CRON задача отрабатывает некорректно в сравнении с хуком admin_init?

    @ligisayan Автор вопроса
    В силу того, что cron необходимы функции, как для фронта, а не админки, то для работы необходимо обязательно подключить
    require_once ABSPATH . '/wp-admin/includes/image.php';
    require_once ABSPATH . 'wp-admin/includes/media.php';
    Ответ написан
    Комментировать
  • Дубль контента во вкладке с описанием товара на woocommerce - почему?

    @ligisayan Автор вопроса
    Нашел ответ здесь

    Нужно в functions.php прописать следующую инструкцию:
    function mytheme_add_woocommerce_support() {
    	add_theme_support( 'woocommerce' );
    }
    add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );


    Смысл в том, что если в теме не задекларировать, что она использует woocommerce, то по умолчанию шаблоны будут браться не из папки woocommerce в теме как мы того ожидаем, а из корня, т.е. single.php будет приоритетнее по отношению к single-product.php в подпапке темы

    Темы по умолчанию в этом смысле отличаются, т.к. woocommerce закладывает в них поддержку изначально.
    Ответ написан
    Комментировать
  • Как вывести полное описание товара на wordpress?

    @ligisayan Автор вопроса
    нужно было вот так выводить:
    echo $product->post->post_content;
    Ответ написан
    Комментировать
  • Как авторизоваться в woocommerce по мобильному телефону?

    @ligisayan Автор вопроса
    Вот так
    $order = new WC_Order($order_id);
       $order_email = $order->billing_email;
       $email = email_exists( $order_email );  
       $user = username_exists( $order_email );
       		$random_password = wp_generate_password();
    	 	$userdata = array(
    			'user_pass'          => $random_password,
    			'user_login'         => $order_email,
    			'first_name'         => $order->billing_first_name,
    			'user_email'         => $order_email,
    			'role'               => 'customer',
    		);
    		$userid = wp_insert_user( $userdata );
    Ответ написан
    Комментировать
  • Как сделать слайдер изображений который на мобильнике превращается в сетку?

    @ligisayan Автор вопроса
    На основе мысле EvgenyMorozov нашел решение, может быть кому-нить тоже пригодится (привожу вкратце)

    1. делаем такую обертку - добавляем в каркас классы grid-row и grid-col, которые будут иммитировать bootstrap сетку.
    <div class="slider grid-row" >
    while ( $loop->have_posts() ): $loop->the_post(); ?>
      <div class="grid-col">
        <div class="img-wrapper">
           <?php if ( has_post_thumbnail()) {
                 the_post_thumbnail('full','class=img-fluid');
            } ?>
        </div> 
       <?php endwhile; wp_reset_postdata(); ?>
    </div>


    2. Устанавливаем у слайдера параметры для мобильных разрешений, чтобы на них не инициализировался
    {
              breakpoint: 480,
              settings: "unslick"
            }


    3. Прописываем классы иммитируюшие bootstrap сетку
    @media (max-width: 480px) {
    	.product-row {    
    	    display: -webkit-box;
    	    display: -ms-flexbox;
    	    display: flex;
    	    -ms-flex-wrap: wrap;
    	    flex-wrap: wrap;
    	    margin-right: -15px;
    	    margin-left: -15px;
    	}
    	.product-col-6 {
    	    -webkit-box-flex: 0;
    	    -ms-flex: 0 0 50%;
    	    flex: 0 0 50%;
    	    max-width: 50%;
    	    position: relative;
    	    width: 100%;
    	    min-height: 1px;
    	    padding-right: 15px;
    	    padding-left: 15px;
    	}	
    }


    4. Вуаля! все работает и без кривостей и костылей
    Ответ написан
    Комментировать
  • Как просуммировать строки в шорткоде wordpress?

    @ligisayan Автор вопроса
    Моя задача решается с помощью буферизации вывода ob_start() - ob_get_clean()
    function shortcode_function() {
    ob_start();
    	$args = array(
    	'numberposts' => 5,
    	'category'    => 0,
    	'orderby'     => 'date',
    	'order'       => 'DESC',
    	'meta_key'    => '',
    	'meta_value'  =>'',
    	'post_type'   => 'movies',
    	'suppress_filters' => true,
    );
    
    $posts = get_posts( $args );
    $cont = 0;
    
    foreach( $posts as $post ){ 
    setup_postdata($post); 
     ?>
    <li><a href="<?php echo $post->guid; ?>"><?php echo $post->post_title; ?></a></li>
    
    <?php }
    $cont = ob_get_clean();
    	return $cont;
    
    }
    add_shortcode( 'show_films', 'shortcode_function' );
    Ответ написан
    Комментировать
  • Как в wordpress создать интерактивную гугл карту с закрашенными областями?

    @ligisayan Автор вопроса
    Ответ на мой вопрос в реализации Visualization: GeoChart API.
    Ответ написан
    Комментировать
  • Как перенести wordpress сайт с локального сервера на хостинг с https?

    @ligisayan Автор вопроса
    Дело в сертификате сервиса Cloudflare.
    Плагин CloudFlare Flexible SSL решил проблему.
    Ответ написан
    Комментировать
  • Почему не все страницы правильно отображаются по https?

    @ligisayan Автор вопроса
    Нашел решение - в wp-config.php прописал следующее:
    $_SERVER['HTTPS']='on';
    и в файле .htaccess

    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
    RewriteCond %{SERVER_PORT} !^443
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ https://yourdomain.by%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTP:X-SSL-Emu} !on
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    Ответ написан
    2 комментария
  • Как заменить конструкцию query_posts на get_posts?

    @ligisayan Автор вопроса
    Пагинация заработает при выполнении такого условия:
    For getting the current pagination number on a static front page (Page template) you have to use the 'page' query variable: Ссылка на источник

    if ( is_front_page() ) {
            $paged = (get_query_var('page')) ? get_query_var('page') : 1;   
        } else {
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
        }
    Ответ написан
    Комментировать
  • Как в wordpress организовать вывод только родительских категорий произвольных типов?

    @ligisayan Автор вопроса
    Помогла статья - решил так:
    <span class="dashicons-before folder"><?php  
    		$categories = get_the_terms( $post->ID, APP_TAX_CAT ); 
    		foreach ($categories as $category) {
    			if(!$category->parent) 
    			{
    				echo "<a href='/ad-category/".urlencode(mb_strtolower($category->name)). "/' rel='tag' class='cp-fixed-color'>". $category->name. "</a>";
    			}
    		}
    		?></span>
    Ответ написан
    Комментировать
  • Какие посоветуете плагины для создания собственных типов записей с миниатюрами?

    @ligisayan Автор вопроса
    Протестировал - разобрался.. Плагин не совместим с темой ClassiPress. Приходится ее выключать, а потом заново включать, чтобы иметь возможность добавить новую таксономию. (причем, краткий заголовок нужно указывать только латиницей - начинает ругаться только при отлюченной теме ClassiPress)
    Ответ написан
    Комментировать
  • Как исключить мета поле в запросе get_posts?

    @ligisayan Автор вопроса
    Павел подсказал итоговое решение
    $args = array(
        'post_type' => APP_POST_TYPE,
        'ignore_sticky_posts' => true,
        'meta_query' => array( 
                         'relation' => 'AND',
          array('key' => 'cp_category', 
                'value' => 'Шины', 
                'compare' => '!='
     			      ),
                            array('key' => 'cp_new', 
                'compare' => 'NOT EXISTS'
     			      )
             ), 
    );
    
    $categories = get_posts( $args );
    Ответ написан
    Комментировать
  • Почему не отображаются файлы в библиотеке wordpress?

    @ligisayan Автор вопроса
    Все оказалось банально - место на хостинге переполнилось
    Ответ написан
    Комментировать
  • Как при удалении последнего товара переадресовывать на шаблон с пустой корзиной?

    @ligisayan Автор вопроса
    Нашел решение - привязался к триггеру updated_wc_div

    $('body').on('updated_wc_div',function() {
       location.reload(); // uncomment this line to refresh the page.
    });
    Ответ написан
    Комментировать
  • Как избавиться от уведомления "товар удален. отменить?"?

    @ligisayan Автор вопроса
    Сработало только скрытие по полному пути в стилях
    .site-content>.col-full>.woocommerce>.woocommerce-message {
    	display: none!important;
    }
    Ответ написан
    Комментировать
  • Как расширить фон шапки таблицы за ее пределы?

    @ligisayan Автор вопроса
    Решение через дополнительное позиционирование блока на всю ширину - фидл
    <div class="yellow"></div>
    <div class="col-full">
    <table class="shop_table shop_table_responsive cart woocommerce-cart-form__contents" cellspacing="0">
      <thead>
        <tr>
          <th class="product-thumbnail">
            <h1 class="entry-title">Корзина</h1>
          </th>
          <th class="product-name">Обработка заказов производится<br>с 09:00 до 18:00</th>
          <th class="product-subtotal">Итого</th>
          <th class="product-remove"><button>Оформить заказ</button></th>
        </tr>
      </thead>
      <tbody>
        <tr class="woocommerce-cart-form__cart-item cart_item">
          <td class="product-thumbnail">
            thumbnail
          </td>
          <td class="product-name" data-title="Товар">
            Товар
          </td>
          <td class="product-subtotal" data-title="Итого">
            Итого
          </td>
          <td class="product-remove">
            Удалить эту позицию</td>
        </tr>
      </tbody>
    </table>
    </div>

    .col-full {
      position:relative;
      z-index:999;
      width: 980px;
      margin-right:50px;
      margin-left:50px;
    }
    .yellow {
          position: absolute;
        width: 100%;
        height: 82px;
        background-color: yellow;
        z-index: 1;
    }
    thead {
      background-color:yellow;
    }
    Ответ написан
  • Есть ли способ удалить функцию с хука wordpress?

    @ligisayan Автор вопроса
    Решение найдено! Нужно удалять хук через подключение хука инициализации init
    add_action( 'init', 'jk_remove_storefront_header_search' );
    function jk_remove_storefront_header_search() {
    remove_action( 'storefront_header', 'storefront_product_search', 40 );
    }


    Вот, кстати, интересная статья по этому вопросу
    remove_action или remove_filter не работает в дочерней теме WordPress, если пытаться удалить хуки родительской темы
    В родительской теме определен ряд хуков, которые мешают мне и хочется их удалить в дочерней теме.
    Логично предположить что нужно просто вставить remove_action или remove_filter в function.php дочерней темы.
    Но не тут то было!
    Это не работает.
    Как оказывается, function.php дочерней темы грузится перед тем же файлом родительской темы. И если использовать обычную схему, то получится что попытка удаления хука произойдет перед его добавлением. Что как мы знаем по кодексу оказывается безрезультатным.
    Таким образом нам нужно добиться ситуации, когда удаление хука произойдет после его определения.
    Как это сделать?
    Все очень просто Нужно удаление хука зацепить на более поздний хук, который выполнится после определения хука родительской темы. О как
    Но все просто. Самый элементарный хук init вполне нам подойдет.
    И делаем так:
    add_action('init','removeOldFunction');
    function removeOldFunction(){
    remove_action( 'template_redirect', 'alienship_nice_search_redirect' );
    }

    Этим кодом мы удалим хук alienship_nice_search_redirect, который определен в родительской теме, при помощи function.php дочерней.
    Проверено
    Все хорошо, пока дело не касается сайдбара. Там хук инициализации виджетов работает еще позднее чем init, потому нужно вешаться на хук after_setup_theme.
    Ну и в других случаях. Удаляя тот или иной хук не забудьте проверить его порядок загрузки и убедиться что он грузится позднее, чем тот который вы удаляете.
    Ответ написан
    Комментировать
  • Почему не работает функция вывода шорткода wordpress do_shortcode()?

    @ligisayan Автор вопроса
    Всю карусель рказывается перекрывает .onepage-section:before а сам код карусели рабочий
    Ответ написан
    Комментировать