Ответы пользователя по тегу WordPress
  • Как сделать разные дизайны для разных категории на Wordpress?

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

    На архивной странице archive.php посты выводятся с подключением шаблонов вида

    get_template_part( 'templates/archive/post', get_post_type() );


    Т.е. WP пытается использовать файлы post-service.php или post-event.phpб а при их отсутствии подключает базовый post.php

    Для изменения шаблона архивной страницы нужно создать в корне файл taxonomy-{taxonomy}.php или archive-{post_type}.php в зависимости что вам нужно, подробнее в смотрите иерархию шаблонов

    Глобальный запрос постов находится в global $wp_query, если его нужно отфильтровать, то используйте хук pre_get_posts

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете получить массив объектов меню с помощью wp_get_nav_menu_items() по переданному ID или location

    // Получаем элементы меню по ID.
    $nav_menu_items = wp_get_nav_menu_items( $menu_id );
    
    // Получаем элементы меню по location.
    $menu_location = 'primary';
    $locations     = get_nav_menu_locations();
    
    if ( isset( $locations[ $menu_location ] ) ) {
      $nav_menu_items = wp_get_nav_menu_items( $locations[ $menu_location ] );
    }


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

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

    if ( $cat->parent === 0 ) {
    	# родительская категория.
    } else {
    	# дочерняя категория.
    }
    Ответ написан
    3 комментария
  • Как скрыть или запретить смотреть статьи по дате в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете изменить основной запрос на хуке pre_get_posts. Используйте проверки is_date(), is_year(), is_month() и is_day()

    Так же вы всегда можете сделать нужные вам редиректы на хуке template_redirect с теми же проверками

    PS. Сомневаюсь, что вам это поможет, т.к. даты публикации/обновления записей есть в xml-карте сайта
    Ответ написан
    Комментировать
  • Из-за чего может не работать список?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Из-за чего на сайте могут не работать переходы между городами в шапке?


    Из-за ошибки в скрипте

    6397736e030c2913256843.png
    63977373e001c047019558.png
    Ответ написан
    1 комментарий
  • Как подключить сайт к xml формату Яндекс.Недвижимость на Wordpress без Woocommerce?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Ответ написан
    Комментировать
  • Как сделать свои метатеги title и description из шаблона PHP?

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

    function get_yoast_custom_title() {
    
    	if ( is_single() ) {
    		$string = get_the_title();
    	} else {
    		$string = 'Заголовок по умолчанию';
    	}
    
    	return $string;
    }
    
    
    // Define the action for register yoast_variable replacments.
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%CustomTitle%%', 'get_yoast_custom_title', 'advanced', __( 'Some instead title text', 'wpgen' ) );
    }
    
    // Add action.
    add_action( 'wpseo_register_extra_replacements', 'register_custom_yoast_variables' );


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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    function get_category_post_count() {
    
    	$string = '';
    
    	if ( is_category() && isset( get_queried_object()->count ) ) {
    		$string = get_queried_object()->count;
    	}
    
    	return $string;
    }
    
    
    // Define the action for register yoast_variable replacments.
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%PostCount%%', 'get_category_post_count', 'advanced', __( 'Some instead title text', 'wpgen' ) );
    }
    
    // Add action.
    add_action( 'wpseo_register_extra_replacements', 'register_custom_yoast_variables' );
    Ответ написан
    3 комментария
  • Каким плагином можно из Excel сделать сайт на Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Скорее всего вы ищите плагин WP All Import, но он платный. Для конвертации .xlsx файлов в массив есть неплохая библиотека SimpleXLSX
    Ответ написан
    Комментировать
  • Wordpress - Как реализовать изображения под Retina?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть плагин Perfect Images, который создает нужные размеры, файлы изображений, а так же добавляет их в вывод функций. Вы можете его установить и использовать или разобраться в его коде
    Ответ написан
    Комментировать
  • Taxonomy, как сделать одинаковый slug?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Я бы при регистрации типа записи с помощью функции register_post_type() указал аргумент 'has_archive' => 'repetitors', это общий архив для всех записей этого типа. Так же вам будет достаточно регистрации одной таксономии

    add_action( 'init', 'education_register_post_type' );
    function education_register_post_type() {
    
    	// Taxonomy repetitor_cat.
    	register_taxonomy( 'repetitor_cat', array( 'repetitor' ), array(
    		'labels'             => array(
    			'name'              => _x( 'Repetitor category', 'taxonomy general name', 'education' ),
    			'singular_name'     => _x( 'Repetitor categories', 'taxonomy singular name', 'education' ),
    			'search_items'      => __( 'Search Repetitor category', 'education' ),
    			'popular_items'     => __( 'Popular Repetitor category', 'education' ),
    			'all_items'         => __( 'All Repetitor categories', 'education' ),
    			'parent_item'       => null,
    			'parent_item_colon' => null,
    			'edit_item'         => __( 'Edit Repetitor category', 'education' ),
    			'update_item'       => __( 'Update Repetitor category', 'education' ),
    			'add_new_item'      => __( 'Add new Repetitor category', 'education' ),
    			'new_item_name'     => __( 'New Repetitor category name', 'education' ),
    			'menu_name'         => __( 'Repetitor categories', 'education' ),
    		),
    		'public'             => true,
    		'show_tagcloud'      => true,
    		'hierarchical'       => false,
    		'query_var'          => true,
    		'show_in_quick_edit' => true,
    		'sort'               => true,
    	) );
    
    	// Post type repetitor.
    	register_post_type( 'repetitor', array(
    		'labels'          => array(
    			'name'               => __( 'Repetitors', 'education' ),
    			'singular_name'      => __( 'Repetitor', 'education' ),
    			'add_new'            => __( 'Add Repetitor', 'education' ),
    			'add_new_item'       => __( 'Add new Repetitor', 'education' ),
    			'edit_item'          => __( 'Edit Repetitor', 'education' ),
    			'new_item'           => __( 'New Repetitor', 'education' ),
    			'view_item'          => __( 'View Repetitor', 'education' ),
    			'search_items'       => __( 'Search Repetitor', 'education' ),
    			'not_found'          => __( 'Repetitor not found', 'education' ),
    			'not_found_in_trash' => __( 'Repetitor not found in trash', 'education' ),
    			'menu_name'          => __( 'Repetitors', 'education' ),
    		),
    		'public'          => true,
    		'show_in_rest'    => true, // Включает Gutenberg.
    		'capability_type' => 'post',
    		'hierarchical'    => false,
    		'has_archive'     => 'repetitors',
    		'rewrite'         => array( 'slug' => 'repetitors', 'with_front' => false, 'pages' => true, 'feeds' => false, 'feed' => false ),
    		'query_var'       => true,
    		'supports'        => array( 'page-attributes', 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ),
    		'taxonomies'      => array( 'repetitor_cat' ),
    	) );
    }


    Если ваш вопрос касается больше ссылочной структуры, то в этих функциях вам пригодится аргумент rewrite и фильтры post_type_link и term_link
    Ответ написан
  • Почему Wordpress не показывает список всех постов?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вероятнее всего у вас нет записей в глобальном запросе $wp_query, проверить можно распечатав этот запрос

    global $wp_query;
    var_dump( $wp_query );


    Глобальный запрос для страницы записей добавится если вы укажите этот шаблон в опции "Страница записей". Кроме того, изменить глобальный запрос можно на хуке pre_get_posts

    add_action( 'pre_get_posts', 'blog_posts' );
    function blog_posts( $query ) {
    
    	if ( ! is_admin() && $query->is_main_query() && is_page_template( 'blog.php' ) ) {
    		$query->set( 'post_type', 'post' );
    		$query->set( 'posts_per_page', '10' );
    	}
    }


    Так же вы можете сделать кастомный запрос wp_query(), но учитывайте, что функция пагинации the_posts_navigation() работает только с глобальным запросом

    PS. Код писал без тестов, может не работать
    Ответ написан
    Комментировать
  • Почему автоматически появляется ссылка woocomerce?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В html нельзя вкладывать ссылку в ссылку. Так работать не будет:

    <a href="#">
    	<a href="#"></a>
    </a>


    Вы можете погуглить костыльные способы, как исправить это поведение или немного изменить верстку, переписав некоторые элементы на position: absolute
    Ответ написан
    2 комментария
  • Как создать поиск, типа гугл, на WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если не рассматривать сложные, автоматизированные варианты или ИИ, то вы можете просто собрать массив "запрос" => "ссылка". Товаров и категорий, вероятно, на вашем сайте не так много и, скорее всего, весь список ограничится шаблоном {{Категория}} {{Подкатегория}}

    Просмотрите запросы пользователей в wordstat и отредактируйте список руками, чтобы придать более человекопонятный вид

    А дальше после ввода 3-4 символов пользователем в поле поиска по ajax парсите список регулярками и грузите в выпадающем поле подходящие ссылки
    Ответ написан
  • Как добавить в тайтл и десрипшин города?

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

    function get_seo_city() {
    
    	$city = get_post_meta( get_the_ID(), '_city', true );
    
    	if ( ! $city ) {
    		$string = 'Город по умолчанию';
    	}
    
    	return $string;
    }
    
    
    // Define the action for register yoast_variable replacments.
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%City%%', 'get_seo_city', 'advanced', __( 'Some instead title text', 'wpgen' ) );
    }
    
    // Add action.
    add_action( 'wpseo_register_extra_replacements', 'register_custom_yoast_variables' );


    По склонению городов в писал здесь https://qna.habr.com/q/1130066#answer_2138126
    Ответ написан
    Комментировать
  • Как задать условие для ru en?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( determine_locale() === 'ru_RU' ) {
    	# ru code...
    } else {
    	# other code...
    }
    Ответ написан
    Комментировать
  • Как переименовать ссылку на новую страницу Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Нужно зайти в Настройки → Постоянные ссылки и заменить их структуру

    635a63b5dbff4372372511.png
    Ответ написан
    Комментировать
  • Почему не работает код?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Переводы строк нужно делать через функции __(), _e(), esc_html__(), esc_html_e()

    __( 'Article', 'mydomain' );
    Ответ написан
  • Как вывести пользовательские таксономии?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Основная функция для получения таксономий — get_terms()

    $args = array(
    	'taxonomy'   => 'card_cat',
    	'hide_empty' => false,
    );
    
    $terms = get_terms( $args );
    
    if ( $terms ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<h2>' . $term->term_id . '</h2>';
    	}
    }


    Для получения таксономий, относящихся к конкретной записи вы можете использовать функцию get_the_terms()

    $terms = get_the_terms( $post->ID, 'card_cat' );
    
    if ( $terms ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<h2>' . $term->term_id . '</h2>';
    	}
    }
    Ответ написан
    Комментировать
  • Как вывести заголовок и описание рубрики Вордпресс в произвольном месте?

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

    1. get_term_by() — получает указанный термин (элемент таксономии) по заголовку, слагу или по переданному ID термина

    $term = get_term_by( 'slug', 'example', 'card_cat' );
    
    if ( $term ) {
    	echo '<h2>' . $term->term_id . '</h2>';
    }


    2. get_terms() — получает элементы (термины) указанной таксономии по переданным параметрам

    $args = array(
    	'taxonomy'   => 'card_cat',
    	'slug'       => array( 'example' );
    	'hide_empty' => false,
    );
    
    $terms = get_terms( $args );
    
    if ( $terms ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<h2>' . $term->term_id . '</h2>';
    	}
    }


    3. get_the_terms() — получает элементы таксономии (термины), которые относятся к указанному посту (записи)

    $terms = get_the_terms( $post->ID, 'card_cat' );
    
    if ( $terms ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<h2>' . $term->term_id . '</h2>';
    	}
    }
    Ответ написан
    1 комментарий