• Как стоит сверстать хэдер?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Визуально выглядит будто у проекта сетка на всю ширину с паддингами по краям, .container-fluid, если бутстрап. Лого 3 колонки, кнопка 2, остальное под меню с выравниванием по правому краю
    Ответ написан
    Комментировать
  • Как переиспользовать шаблоны?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    <?php get_template_part( 'form-contacts' ); ?>
    Ответ написан
    2 комментария
  • Google PageSpeed показывает разные показания. чему верить?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Там же написано: "Значения приблизительные и могут изменяться". Через 28 дней (может больше) в разделе Origin Summary должна появиться такая табличка, это средние значения, на них стоит ориентироваться

    6123247c365f5881406836.png
    Ответ написан
    Комментировать
  • Largest Contentful Paint норма ли прыганье результатов?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Да, норма. Там написано: "Значения приблизительные и могут изменяться". Через 28 дней (может больше) в разделе Origin Summary должна появиться такая табличка, это средние значения, на них стоит ориентироваться

    612322dc16391860532625.png
    Ответ написан
    Комментировать
  • Почему в Wordpress не отображаются изображения к записям?

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

    • Вы не добавили изображения
    • Что-то с ACF
    • В массиве ['sizes'] нет значения 'medium'
    • Для .product_image не заданы стили, поэтому высота изображения 0


    Нужно дебажить: сначала удостовериться, что в url() выводится нужная ссылка на изображение, потом смотреть высоту элемента в css
    Ответ написан
    2 комментария
  • Как правильно подключить отдельно скрипты и стили на разных страницах WordPress?

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

    if ( get_post_type() === 'post' ) {
    	# code...
    }


    Что касается вашей задачи, то понадобится составное условие. Вам нужно убедиться, что вы находитесь в одной из двух категорий или сингл post имеет одну из двух категорий:

    if ( is_category( [ 'news', 'projects' ] ) || ( is_singular( 'post' ) && has_category( [ 'news', 'projects' ] ) ) ) { 
    	# code...
    }
    Ответ написан
    1 комментарий
  • Как в WP сделать кастомную страницу через исходные файлы?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Нужно в корне темы создать шаблон вида template-about-page.php. В самом шаблоне нужно указать его название и перечислить типы записей для которых он будет применяться

    /*
    Template Name: Шаблон о компании
    Template Post Type: post, page
    */
    Ответ написан
    Комментировать
  • Как вывести пагинацию на странице рубрик?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    На архивных страницах рубрик и таксономий уже существует глобальный запрос, перебивать его своим — это моветон и издевательство надо производительностью

    Рекомендую вам посмотреть archive.php популярных или стандартных тем twenty, там вы не найдете кастомных запросов WP_Query()

    С глобальным запросом прекрасно работают функции ядра the_posts_pagination() или the_posts_navigation()

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

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

    add_action( 'pre_get_posts', 'set_products_current_user', 1 );
    function set_products_current_user( $query ) {
    	// Выходим, если это админ-панель или не основной запрос
    	if( is_admin() || ! $query->is_main_query() )
    		return;
    
    	// Устанавливаем текущего юзера, если это запрос товаров
    	if ( $query->get( 'post_type' ) == 'product' ) {
    		$query->set( 'author', get_current_user_id() );
    	}
    
    }
    Ответ написан
  • Как называется хук в seo yast, который получает мета из админки или который добавляет мета на страницу?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Немного лирики: я довольно долго бодаюсь с yoast и, к сожалению, дока и качество исходников оставляют желать лучшего, к тому же они могут их переписывать — сегодня у вас данные в одной таблице лежат, а завтра уже в другой. К тому же, у них просто невероятное количество кода, как для плагина который просто выводит десяток мета-тегов. Надеюсь в обозримом будущем SEO добавят в ядро и я смогу отказаться от этого недоразумения)

    Ближе к делу: перебирая разные варианты работы с yoast я в конце концов остановился на том, что при установке меняю все поля "SEO-заголовок" и "Мета-описание" в разделе "Отображение в поисковой выдаче" на %%InsteadTitle%% и %%InsteadDescription%%

    После чего подключаю свой файл в тему, где создаю эти переменные и собираю их так, как мне нужно — чаще всего заголовки и описания берутся из excel или лежат в пост-мете (даты проведения мероприятия, характеристики товара). Болванка выглядит так:

    // Заголовки
    function get_seo_instead_title() {
    
    	$string = '';
    
    	if ( is_archive() ) {
    		// берем сео-заголовки из excel-таблицы
    	}
    
    	if ( is_single() ) {
    		// собираем сео-заголовки из get_the_title() и get_post_meta()
    	}
    
    
    	if ( $string == '' ) {
    		if ( is_home() || is_front_page() ) {
    			$string = get_bloginfo( 'name' ) . ' — ' . get_bloginfo( 'description' );
    		} elseif ( is_post_type_archive() ) {
    			$string = get_queried_object()->label;
    		} elseif ( is_archive() ) {
    			$string = get_queried_object()->name;
    		} else {
    			$string = get_the_title();
    		}
    	}
    
    	return $string;
    
    }
    
    
    // Описания
    function get_seo_instead_description() {
    
    	$string = '';
    
    	if ( is_single() ) $string = get_the_excerpt();
    
    	if ( $string == '' ) {
    		$string = 'Какое-то дефолтное описание для всех страниц, если его нет';
    	}
    
    	return $string;
    
    }
    
    // Регистрируем переменные
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%InsteadTitle%%', 'get_seo_instead_title', 'advanced', 'Some instead title text' );
    	wpseo_register_var_replacement( '%%InsteadDescription%%', 'get_seo_instead_description', 'advanced', 'Some instead title text' );
    }
    
    // Add action
    add_action('wpseo_register_extra_replacements', 'register_custom_yoast_variables');
    Ответ написан
    Комментировать
  • Как добавить класс к ARTICLE, если он для отрывка (excerpt) Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В WordPress отрывки ничем не обернуты, это делает ваша тема. Функция the_excerpt() выводит отрывок, get_the_excerpt() получает для обработки. Плюс там есть несколько фильтров

    Если вы собрались менять тему, то это правильно делать через функционал создания дочерних тем, иначе ваши изменения затрутся после обновления. Делаете дочернюю тему, копируете в нее шаблон и меняете так, как вам нужно. Теперь WordPress будет сначала проверять наличие шаблона в дочерней и выводить его, если он есть, если нет - будет брать из родительской

    Если в теге <article> есть функция post_class(), то можно добавить класс через фильтр

    // добавляем классы для мероприятий
    add_filter( 'post_class', 'add_post_classes' );
    function add_post_classes( $classes ) {
    
    	if ( get_post_type() === 'event' ) {
    		$classes[] = 'article-event';
    	}
    
    	return array_unique( $classes );
    }
    Ответ написан
  • Почему не переводится время из UNIX на php?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    $string = '1629621000';
    $date = date( "F d Y h:i:s e o", $string );
    var_dump( $date ); // August 22 2021 08:30:00 UTC 2021
    Ответ написан
    Комментировать
  • Рассылка писем о новой записи Wordpress, какие есть бесплатные варианты?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете написать небольшой код, который при помощи функции mail() или wp_mail() будет отправлять сообщения. Но письма могут попадать в спам, нужно настраивать SMTP
    Ответ написан
    Комментировать
  • Как применить стили ко всем потомкам с заданным классом кроме последнего?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    .block {
    	margin-top: 0;
    	&:not(:last-child) {
    		margin-bottom: 40px;
    	}
    }
    Ответ написан
  • Для чего нужны CMS веб-разработчику?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    CMS нужна не столько разработчику, сколько заказчику. Заказчик, как правило, не умеет работать с кодом и ему нужна удобная система управления контентом на сайте

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Напишу свое личное мнение, т.к. с прайсами и табличными данными я работал неоднократно: ничего удобнее Excel пока что не придумали. Не важно, используете ли вы update_post_meta() или плагины типо ACF, большие таблицы в WordPress редактировать не удобно

    Я советую посмотреть в сторону google sheets api или обработчика обычного excel. Раньше я пользовался старой библиотекой PHPExcel, но она тяжелая, а когда стала сыпать ошибки, то я нашел более простой и легкий вариант SimpleXLSX. Единственные минус последней - она не умеет писать в excel, но мне и не надо
    Ответ написан
    Комментировать
  • Почему не работает вывод категории записи?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    get_the_category() не будет работать потому что у вас не категории, а кастомные таксономии. Используйте get_the_terms()

    $cur_terms = get_the_terms( get_the_ID(), 'super_grill_recipes_categories' );
    if( is_array( $cur_terms ) ) {
    	echo '<ul class="term-list">';
    	foreach( $cur_terms as $cur_term ){
    		echo '<li class="term-list__item">';
    			echo '<a class="term-list__link" href="'. get_term_link( $cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>';
    		echo '</li>';
    	}
    	echo '</ul>';
    }
    Ответ написан
    Комментировать
  • Как вставить строку перевода в php код?

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

    if ( is_plugin_active( 'polylang/polylang.php' ) ) {
    	$sale = pll__( 'Скидка' );
    } else {
    	$sale = esc_html__( 'Sale!', 'woocommerce' );
    }
    
    echo apply_filters( 'woocommerce_sale_flash', '<span class="onsale">' . $sale . '</span>', $post, $product );
    Ответ написан
    Комментировать
  • Как подключить стили и cкрипты в дочерней теме wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Хук называется wp_enqueue_scripts, а не wp_enqueue_script

    Для подключения файлов есть отличная функция get_theme_file_uri(), которая проверяет наличие файла перед подключением, это довольно удобно

    В версии файла можно указать время последнего изменения, чтобы при его изменении браузер обновлял его у себя в кеше с помощью filemtime()

    add_action( 'wp_enqueue_scripts', 'my_scripts_slider' );
    function my_scripts_slider() {
    	wp_enqueue_script( 'chifslider1', get_theme_file_uri( 'chifslider/chief-slider.dev.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-slider.dev.js' ) ) );
    	wp_enqueue_script( 'chifslider2', get_theme_file_uri( 'chifslider/chief-int.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-int.js' ) ) );
    };


    Подробнее о работе с подключением файлов смотрите здесь
    Ответ написан
    Комментировать
  • Как удалить мета тег robots?

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

    Управлять работой этого тега вы можете с помощью одноименного фильтра wp_robots. Например, код ниже добавит noindex на архивные страницы на которых нет постов

    add_filter( 'wp_robots', 'custom_wp_robots' );
    function custom_wp_robots( $robots ) {
    
    	if ( is_archive() && !have_posts() ) {
    		$robots['noindex'] = true;
    		$robots['nofollow'] = true;
    	}
    	
    	return $robots;
    }
    Ответ написан
    Комментировать