Ответы пользователя по тегу WordPress
  • Как переименовать ссылку на новую страницу 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 комментарий
  • Где искать файлы robot.txt и sitemap.xml в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    С версии 2.1.0 при отсутствии физического файла robot.txt введена функция do_robots(), которая создает динамический файл robots.txt. Для добавления своих правил вы можете использовать хук robots_txt

    add_filter( 'robots_txt', 'add_robotstxt', -1 );
    function add_robotstxt( $text ) {
    	$text .= "Disallow: */comments";
    	return $text;
    }


    Правильнее управлять файлом именно через функцию, а не через физический файл, т.к. это даст возможность SEO-плагинам тоже изменять ваш robots.txt

    Создание XML-карты сайта появилось в версии WordPress 5.5, она доступна по адресу /wp-sitemap.xml с редиректами. На wp-kama есть отличная статья с подробным описанием функционала
    Ответ написан
    Комментировать
  • Как отобразить метки в select option в wordpress для ajax фильтра?

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

    $args = array(
    	'taxonomy' => 'post_tag',
    );
    
    wp_dropdown_categories( $args );
    Ответ написан
    1 комментарий
  • Как отменить индексацию страниц категорий товаров?

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

    add_filter( 'wp_robots', 'wpz_robots' );
    function wpz_robots( $robots ) {
    
    	if ( is_archive() && is_tax( 'product_tag' ) ) {
    		$robots['noindex']  = true;
    		$robots['nofollow'] = true;
    	}
    
    	return $robots;
    }


    Так же вы можете фильтром robots_txt добавить тоже самое в файл robots.txt

    add_filter( 'robots_txt', 'wpz_robots_txt', 20, 2 );
    function wpz_robots_txt( $output, $public ) {
    
    	if ( is_archive() && is_tax( 'product_tag' ) ) {
    		$output .= "Disallow: /product_tag/\n";
    	}
    
    	return $output;
    }
    Ответ написан
    Комментировать
  • Как добавить мета теги под фильтры для Wordpressa?

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

    https://example.loc/products/?type=furniture&color=white


    Для плагина Yoast я делаю следующим образом:

    1. Создаю переменную %%InsteadTitle%%'
    2. Заменяю ее в настройках в админке
    3. Программно получаю get-параметры с добавлением из в заголовок
    4. Если язык русский, то прогоняю через фукнцию замены подстрок


    function get_seo_instead_title() {
    
    	$string = '';
    
    	if ( is_single() && get_post_type() === 'product' ) {
    
    		$string = get_the_title();
    		$params   = array( 'type', 'color' );
    
    		// Добавляем в заголовок параметры get-запроса
    		foreach ( $params as $key => $param ) {
    			$var = get_query_var( $param, false );
    
    			if ( $var ) {
    				$string .= ', ' . $var;
    			}
    		}
    
    		// Делаем перевод
    		if ( determine_locale() === 'ru_RU' ) {
    
    			$converter = array(
    				'furniture' => 'мебель',
    				'white'     => 'белый',
    			);
    
    			$string = strtr( $string, $converter );
    		}
    	}
    
    	if ( $string === '' ) {
    		if ( is_post_type_archive() ) {
    			$string = get_queried_object()->label;
    		} elseif ( is_archive() ) {
    			$string = get_queried_object()->name;
    		} elseif ( 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( '%%InsteadTitle%%', 'get_seo_instead_title', 'advanced', 'Some instead title text' );
    }
    add_action( 'wpseo_register_extra_replacements', 'register_custom_yoast_variables' );
    Ответ написан
    2 комментария
  • Как исправить циклическое перенаправление WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Бесконечный редирект вы получаете при попадании на страницу my-account, нужно добавить ее в условие, чтобы попадая на нее редирект не происходил

    function notlogin_redirect() {
    	if ( ! is_user_logged_in() && ! is_page( 'my-account' ) ) {
    		wp_safe_redirect( 'https://www.exampl.com/mysite/my-account/' );
    		die;
    	}
    }
    add_action( 'init', 'notlogin_redirect' );
    Ответ написан
    Комментировать
  • Как можно изменить значение 'meta_key' WP?

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

    6349627f5e65a601346758.png

    Внизу, после редактирования появится список полей с мета-информацией, которую можно изменить

    6349636791207543196214.png

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

    add_action( 'wp_head', 'update_post_views_76' );
    function update_post_views_76() {
    	update_post_meta( 76, '_post_views', '0' );
    }
    Ответ написан
    Комментировать
  • Как добавить слайдер на сайт Wordpress анонса записей?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Проще взять библиотеку slick slider, swiper или owl carousel и написать вывод записей с помощью get_posts() по документации
    Ответ написан
    Комментировать
  • Как вывести миниатюру рубрики Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если это WooCommerce, то данные об изображениях категорий находятся в мета-информации

    $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
    $image_url    = wp_get_attachment_url( $thumbnail_id );


    Если функция get_woocommerce_term_meta() не работает, используйте get_term_meta() вместо нее

    $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
    $image_url    = wp_get_attachment_url( $thumbnail_id );
    Ответ написан
    Комментировать
  • Как сменить шрифт в зависимости от локали?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете проверить локализацию с помощью функции determine_locale() или get_locale() и подключить нужный вам шрифт, например с google fonts

    function wp_enqueue_fonts() {
    	if ( determine_locale() === 'ru_RU' ) {
    		wp_enqueue_style( 'primary-font', '//fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap', array(), '1.0.0' );
    	} else {
    		wp_enqueue_style( 'primary-font', '//fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap', array(), '1.0.0' );
    	}
    }
    add_action( 'wp_enqueue_scripts', 'wp_enqueue_fonts' );
    Ответ написан
    Комментировать
  • Показать отзыв / комментарий только автору?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Для запроса постов с помощью wp_query() есть параметр comment_status за счет которого вы можете выбрать подходящие записи

    Для фильтров специальной функции нет, но вы можете написать его самостоятельно. Вот несколько примеров как это можно сделать

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

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

    if ( ! is_home() && ! is_front_page() ) {
    	the_excerpt();
    }
    Ответ написан
    Комментировать
  • Почему wp_set_post_terms не создает новые термины?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Функция wp_set_post_terms() только устанавливает термины для указанной записи. Для создания терминов используйте функции wp_insert_category() wp_insert_term()
    Ответ написан
  • Как в WP автоматом содержание новой созданной страницы заливать на главную (домашнюю)?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Для запроса любого типа записей вы можете использовать get_posts() или wp_query()

    // Задаем нужные нам критерии выборки данных из БД.
    $args = array(
    	'post_type'      => 'page',
    	'posts_per_page' => 5,
    );
    
    $query = new WP_Query( $args );
    
    // Цикл.
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    		the_title();
    	}
    }
    else {
    	// Постов не найдено.
    }
    
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    Ответ написан
    Комментировать
  • Передать шорткод из functions php в html?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $out = '';
    $out .= '<div class="main__item">';
    	$out .= do_shortcode( '[breadcrumb]' );
    	$out .= '<a href="' . get_permalink() . '" class="main__img">';
    		$out .= get_the_post_thumbnail();
    	$out .= '</a>';
    $out .= '</div>';
    $items[] = $out;
    Ответ написан
  • Есть ли подобный фильтр новостей на WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Из плагинов есть FacetWP и Search & Filter, но судя по скрину, мне кажется, вам придется писать кастомный функционал
    Ответ написан
    Комментировать
  • Как добавить класс костомному посту?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете создать массив $classes, добавлять в него слаги категорий, и выводить список с помощью implode()

    $query = new WP_Query( $args );
    
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    
    		$classes   = array();
    		$classes[] = 'projects__item';
    
    		if ( $categories = get_the_category() ) {
    			foreach ( $categories as $key => $category ) {
    				$classes[] = $category->slug;
    			}
    		}
    
    		echo '<li class="' . esc_attr( implode( ' ', $classes ) ) . '">' . get_the_title() . '</li>';
    
    	}
    }
    Ответ написан
    Комментировать