• Нужно заменить картинку на другую?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    return set_post_thubmnail( $post, $thumbnail_id );

    Разумеется в эту функцию должны попадать все данные $has_thumbnail, $post, $thumbnail_id

    Еще вариант - при выводе проверять наличие прикрепленного изображения и подменять на дефолтное, если его нет

    if ( has_post_thumbnail() ) {
    	$image = get_the_post_thumbnail_url( get_the_ID(), 'large' );
    } else {
    	$image = get_stylesheet_directory_uri() . '/assets/img/default-cover.jpg';
    }
    Ответ написан
  • Как подставлять разные страницы на разных языках?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Я бы вообще не стал загружать файлы каталога в медиа. Сомневаюсь, что кто-то когда-то их будет менять, поэтому я бы закинуть их в папку data в теме как есть, но вы всегда сможете адаптировать пример ниже под себя

    if ( is_plugin_active( 'polylang/polylang.php' )  ) {
    	$locale = get_locale();
    	$data = [
    		'pl_PL' => [
    			'text' => 'Pobierz<br>katalog',
    			'file' => 'price-pl.xlsx',
    		],
    		'lt_LT' => [
    			'text' => 'Parsisiųsti<br>katalogą',
    			'file' => 'price-lt.xlsx',
    		],
    		'en_US' => [
    			'text' => 'Download<br>catalog',
    			'file' => 'price-en.xlsx',
    		],
    	];
    
    	echo '<div class="catalog-file">';
    	   echo '<a href="' . get_stylesheet_directory_uri() . '/data/' . $data[$locale]['file'] . '" download="' . $data[$locale]['file'] . '">' . $data[$locale]['text'] . '</a>';
    	echo '</div>';
    }


    PS Перед выводом файла уместно сделать проверку на его существование

    if ( file_exists( $file ) && filesize( $file ) > 0  ) {
    	// выводим, если существует
    }
    Ответ написан
    Комментировать
  • Как отстилизовать страницу в WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В WordPress для этого регистрируются типы записей и таксономии к ним с помощью функций register_post_type() и register_taxonomy() соответственно. Эта регистрация может осуществляться в теме или в плагинах

    Чтобы стилизовать страницы произвольного типа вы можете создать в корне темы шаблон single-service.php, тут подробнее. Вы так же можете использовать проверку if ( get_post_type() === 'service' ) { ... } в любом месте проекта (где определены глобальные переменные)

    А чтобы добавить выбор шаблона, вы должны при его создании перечислить пост тайпы, к которым он относится примерно так:

    /*
    Template Name: Мой шаблон страницы
    Template Post Type: post, page, service
    */
    Ответ написан
    Комментировать
  • Почему выводится товар три раза?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    У вас три раза выводится вот этот кусок

    echo '
          <div class="swiper-slide">
          <a href="#">
            <div class="product-slide">
              <div class="product-hearth"><svg class="product-global__hearth"><use xlink:href="img/sprite.svg#hearth-icon"></use></svg></div>
              <div class="product-slide-img"><img src="img/product-img.jpg" alt="" class="product-slide__img"></div>
              <div class="product-global__footer">
                <p class="product-global__autor">Ольга Примаченко</p>
                <h3 class="product-global__title">К себе нежно</h3>
                <div class="product-global__interface">
                  <div class="product-global__price">790</div>
                  <div class="product-global__cart"><svg class="product-global__cart"><use xlink:href="img/sprite.svg#cart-icon"></use></svg></div>
                </div>
              </div>
            </div>
          </a>
          </div>
        ';


    Нужно динамически брать из цикла $loop заголовок, ссылку, изображение, цену и автора используя функции the_title(), the_post_thumbnail(), the_permalink() и т.д.

    А еще правильнее использовать wc_get_template_part( 'content', 'product' );. Советую найти этот шаблон, разобрать и переделать ваш код по спецификации woocommerce

    global $product; и return ob_get_clean(); из вашего кода можно смело удалить, а проверку if ( $loop->have_posts() ) { ... } добавить
    Ответ написан
  • Как изменить ЧПУ GUID на читабельный?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    guid используется вообще не для этого. Это поле создается один раз при публикации поста для идентификации записи в RSS ленте. По этому полю парсеры RSS определяют обрабатывали они запись или нет.

    Структура ссылок задается в настройках Настройки → Постоянные ссылки. Получить ссылку можно по id поста в цикле с помощью get_permalink()
    Ответ написан
    Комментировать
  • Есть ли похожие шаблоны wordpress на envato elements?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    У меня дежавю, темы WP продаются на themeforest, а не на envato elements
    Ответ написан
  • Сортировка пользователей по алфавиту, в админки как это сделать на Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете поправить параметры глобального запроса юзеров на хуке pre_get_users

    add_action( 'pre_get_users', 'custom_pre_get_users', 1 );
    function custom_pre_get_users( $query ) {
    
    	if ( is_admin() && $query->is_main_query() )
    		$query->set( 'orderby', 'nicename' );
    
    }


    Можно указать: include, nicename, email, url, registered, display_name, post_count, meta_value, meta_value_num, $meta_key
    Ответ написан
    3 комментария
  • Как добавить ссылку на следующую запись в post type?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Используйте next_post_link() или get_next_post_link()
    Ответ написан
  • Как можно сделать Автоматизацию загрузки прайсов и остатков? Какую cms выбрать?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Автоматизировать загрузку файлов с разных источников, разных форматов и разной структурой это вряд ли

    Для WP есть платный плагин WP All Import, он умеет работать с большинством известных форматов и в нем можно создать регулярные задачи (cron) по образцу
    Ответ написан
  • Есть ли на Envato Elements шаблон wordpress похожий на meduza.io?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    WordPress-темы лучше искать на themeforest.net по запросам magazine или newspaper

    Среди них вполне можно найти те, которые поддерживают темную тему или имеют задний фон. Вот несколько не плохих вариантов:



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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Это называется аккордион
    Можете сделать на бутстрапе https://getbootstrap.com/docs/5.0/components/accordion/
    Или на codepen сотни примеров https://codepen.io/search/pens?q=accordion
    Есть даже без js https://codepen.io/search/pens?q=accordion+css
    Кажется я вот этот переписал под себя и юзаю https://codepen.io/raubaca/pen/PZzpVe
    Ответ написан
    3 комментария
  • Ошибка с тем что выделенная память исчерпана? Как вылечить?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В корне сайта есть файл wp-config.php, добавьте в него строку define( 'WP_MEMORY_LIMIT', '256M' );

    Ограничения памяти так же могут задаваться в php.ini, параметр memory_limit. Это к хостеру
    Ответ написан
    Комментировать
  • Открыть ссылку в новой вкладке?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вот массив параметров, которые принимает этот метод. Вам нужен $args['meta']['target'] = '_blank'

    $args = array(
    	'id'     => '',      // ID элемента меню. Обязательный. Строка. 
    	'title'  => '',      // Заголовок элемента меню. Обязательный. Строка. 
    	'parent' => '',      // ID родительского элемента меню. Строка. 
    	'href'   => '',      // Ссылка для этого элемента меню. Строка. 
    	'group'  => false,   // Является ли этот элемент группой. Логический. По умолчанию false
    	'meta'   => array(   // Массив дополнительных данных элемента. По умолчанию: пустой массив.
    		'html'     => '', // Произвольный HTMl код, который будет добавлен в конце оборачивающего LI тега элемента меню.
    		'class'    => '', // Атрибут тега 'class' 
    		'rel'      => '', // Атрибут тега 'rel' 
    		'lang'     => '', // Атрибут тега 'lang' 
    		'dir'      => '', // Атрибут тега 'dir' 
    		'onclick'  => '', // Атрибут тега 'onclick' 
    		'target'   => '', // Атрибут тега 'target' 
    		'title'    => '', // Атрибут тега 'title' 
    		'tabindex' => '', // Атрибут тега 'tabindex' 
    	),
    )
    Ответ написан
    Комментировать
  • Как сделать из двух сайтов один с сохранением разных тем?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Multisite это не плагин, работает из коробки с помощью установки констант в файле wp-config.php и правил в .htaccess. Мультисайт позволяет в рамках одной админки администрировать несколько сайтов, каждый сайт будет иметь разные таблицы в базе данных ( wp_options, wp_2_options, wp_posts, wp_2_posts и т.д. ). Каждый сайт в мультисайте может иметь свои настройки, свою тему и свой набор активированных плагинов

    Что такое «слияние» в вашем понимании это загадка. Вы хотите, чтобы база была одна, но часть страниц имели одну тему и плагины, а другая часть другую тему и плагины? Так работать не будет

    Если же вы имеете в виду «склейку сайтов», то нормальный план - перенести отличающийся контент с одного сайта на другой, поправить под них дизайн и с донора поставить 301 редиректы на новые адреса страниц
    Ответ написан
  • Как узнать какие страницы используют определенный шаблон WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В meta_value указываете искомый шаблон, там где $page->post_title выводится список заголовков страниц с этим шаблоном

    $pages = get_pages( [
    	'meta_key'     => '_wp_page_template',
    	'meta_value'   => 'page-tpl.php',
    	'hierarchical' => 0
    ] );
    
    foreach( $pages as $page ) {
    	echo '<p>' . $page->post_title .'</p>';
    }
    Ответ написан
    1 комментарий
  • Как запустить slick slider на моб версии для повторителя из ACF?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Где это вы подключили slick slider?

    Заходите в документацию, подключаете скрипты и стили с cdn или с помощью wp_enqueue_scripts(), слайды оборачиваете в контейнер, для этого контейнера пишите инициализацию с настройками

    Вот примерная html-разметка, которая у вас должна получиться в итоге

    <html>
      <head>
      <title>Slick Slider Page</title>
      <link rel="stylesheet" type="text/css" href="slick/slick.css"/>
      <link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
      </head>
      <body>
    
      <div class="slider">
        <div class="slider__item">Slide 1</div>
        <div class="slider__item">Slide 2</div>
        <div class="slider__item">Slide 3</div>
      </div>
    
      <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
      <script type="text/javascript" src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
      <script type="text/javascript" src="slick/slick.min.js"></script>
    
      <script type="text/javascript">
        $(document).ready(function(){
          $('.slider').slick({
            setting-name: setting-value
          });
        });
      </script>
    
      </body>
    </html>
    Ответ написан
    Комментировать
  • Вирус генерирует htaccess и заражает сайт на wordpress. Как исправить?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    1. Удалить нуленые (пиратские) плагины и темы
    2. Почистить базу
    3. Перезалить файлы ядра, темы и плагинов
    4. Если тема самописная, перебрать файлы руками на наличие в ней чужого кода
    Ответ написан
    Комментировать
  • Как сделать вывод постов на отдельной странице (не на главной)?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Я не знаю откуда вы все это берете, но index.php это не главная. index.php - это самый базовый шаблон, он используется, когда WP не может найти никакой другой более подходящий

    Для главной нужно использовать front-page.php или home.php, а шаблон по умолчанию это вообще page.php

    Подробнее читайте иерархию шаблонов
    Ответ написан
  • Как раз и навсегда уяснить, как создавать favicon для Яши?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    WP предлагает загрузить 512х512, обрезает и выводит 32х32, 180х180, 192х192, 270х270 по умолчанию. Возможно вы не те пути смотрите и, возможно, они у вас и не выводятся

    Для сбора favicon у Яндекса существует отдельный робот и по отзывам некоторых пользователей этот робот заходит на сайты раз в 1-3 месяца

    Лично у меня никогда не возникало проблем с обновлением контента, в том числе фавиконок в поисковиках, если отправить карту сайта в webmaster и search-console
    Ответ написан
    Комментировать
  • Как сделать разделение на категории и подкатегории WooCommerce?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Такой список категорий сделать достаточно просто. Плагинами я практически не пользуюсь, но могу показать код, на основе которого вы сможете это реализовать

    1. Для начала нам нужно сделать запрос терминов и пересобрать полученный объект в массив таким образом, чтобы родительская рубрика лежала в одном подмассиве с дочерними, т.е. чтобы у них был общий ключ

    $taxonomy = 'category';
    $args = [
    		'taxonomy' => $taxonomy, // название таксономии с WP 4.5
    		'hide_empty' => false,
    ];
    
    if ( $terms = get_terms( $args ) ) {
    	$output = array();
    	foreach ( $terms as $key => $term ) {
    		if ( $term->parent == 0 ) {
    			$output[$term->term_id]['parent']['title'] = $term->name;
    			$output[$term->term_id]['parent']['link'] = get_term_link( $term->term_id, $taxonomy );
    		} else {
    			$output[$term->parent]['children'][$key]['title'] = $term->name;
    			$output[$term->parent]['children'][$key]['link'] = get_term_link( $term->term_id, $taxonomy );
    		}
    	}
    }


    2. На выходе, в переменную $output мы получаем массивы такого вида

    6108f82f21835125924035.png

    3. Теперь нам остается вывести все значения в нужном нам виде

    if ( isset( $output ) && is_array( $output ) && !empty( $output ) ) {
    
    	foreach ( $output as $key => $items ) {
    		echo '<h2 class="title"><a href="' . $items['parent']['link'] . '" class="title-link">' . $items['parent']['title'] . '</a></h2>';
    		if ( isset( $items['children'] ) ) {
    			echo '<ul class="list">';
    			foreach ( $items['children'] as $key => $item ) {
    				echo '<li class="list-item"><a href="' . $item['link'] . '" class="list-link">' . $item['title'] . '</a></li>';
    			}
    			echo '</ul>';
    		}
    	} // end foreach
    
    } // end if


    PS. Нашел в таблице wp_options опцию category_children, в которой уже записаны связи родитель → ребенок, так что можно использовать ее и упростить код выше
    Ответ написан
    Комментировать