Задать вопрос
  • Нужно ли вставлять переменные в Schema‌ ‌Markup‌ ‌(JSON-LD)‌?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    На php вам нужно собрать массив данных по товару, конвертировать его в json с помощью json_encode() и вставить в тег <script> в html

    $data = [
    	'@context' => '//schema.org',
    	'@type' => 'Product',
    	'name' => 'Dorothy Perkins Свитер',
    	'image' => [
    		'//shop.com/photos/1x1/photo.jpg',
    		'//shop.com/photos/4x3/photo.jpg',
    	],
    	'description' => 'Теплый свитер синего цвета из 100% мериносовой шерсти.',
    	'sku' => '0446310786',
    	'brand' => [
    		'@type' => 'Thing',
    		'name' => 'Dorothy Perkins',
    	],
    	'aggregateRating' => [
    		'@type' => 'AggregateRating',
    		'ratingValue' => '4.4',
    		'reviewCount' => '89',
    	],
    	'offers' => [
    		'@type' => 'Offer',
    		'url' => '//shop.com/dp-sviter',
    		'priceCurrency' => 'RUB',
    		'price' => '2500',
    		'priceValidUntil' => '2020-11-05',
    		'itemCondition' => '//schema.org/NewCondition',
    		'availability' => '//schema.org/InStock',
    		'seller' => [
    			'@type' => 'Organization',
    			'name' => 'Интернет-магазин Shop.co',
    		],
    	],
    ];
    
    $data = json_encode( $data );
    
    echo '<script type="application/ld+json">' . $data . '</script>';
    Ответ написан
    3 комментария
  • Как убрать дублирование кода carbon fields?

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

    $crb_options = array(
    	'post_meta' => __( 'Article Properties', 'textdomain' ),
    	'term_meta' => __( 'Category Properties', 'textdomain' ),	
    );
    
    foreach ( $crb_options as $key => $crb_option ) {
    	Container::make( $key, $crb_option )
    		->add_tab( 'SEO', array(
    			Field::make( 'text', 'crb_seo_title', __( 'Title', 'textdomain' ) ),
    			Field::make( 'textarea', 'crb_seo_description', __( 'Description', 'textdomain' ) ),
    			Field::make( 'text', 'crb_seo_keywords', __( 'Keywords', 'textdomain' ) ),
    			Field::make( 'radio', 'crb_seo_robots', __( 'Robots Visibility', 'textdomain' ) )
    			->add_options( array(
    				'index, follow'     => 'index, follow',
    				'noindex, nofollow' => 'noindex, nofollow',
    			) )
    		) );
    }


    Строку 'SEO' переводить не обязательно, а вот русскоязычные строки лучше в строки перевода обернуть. И очень желательно указать textdomain вашей темы, который указывается при регистрации и подключении файла перевода с помощью функции load_theme_textdomain()

    keywords не используются и никак не влияют на SEO уже более 10 лет

    В каталоге полно плагинов для SEO, будет работать лучше, чем самодеятельность

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть плагин Geolocation IP Detection, судя по описанию вы можете получить информацию по IP пользователя с помощью функции geoip_detect2_get_info_from_current_ip(), разобрать полученный результат и сделать редирект на подходящую языковую версию
    Ответ написан
    Комментировать
  • Как вывести название произвольных категорий на разных языках?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В хлебные крошки Yoast добавляется категория, таксономия или архив таксономии. Если это категория или таксономия, то эти сущности есть в админке и их можно перевести там. Если это архив типа записи, то строки для перевода заголовков задаются при создании в функции register_post_type(), а сами переводы лежат в .po и .mo файлах
    Ответ написан
    Комментировать
  • Почему Wordpress не выводит картинки после замены их url в БД?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Поле guid используется для хранения и идентификации записи в RSS ленте, оно никак не влияет на вывод изображений на сайте
    Ответ написан
  • Как вызвать php function из functions.php wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    footer.php — это шаблон подвала, а functions.php — файл с основными функциями, где им и место. Настоятельно советую вам посмотреть как сделаны стандартные темы twenty или любые популярные, а то у вас слишком странные вопросы
    Ответ написан
    Комментировать
  • Как вызвать JS скрипт из functions.php?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Не совсем понятно, что именно вы хотите сделать, но есть функция wp_add_inline_script(), которая добавляет JS прямо в html документ, после указанного скрипта. Например, инициализация masonry может выглядеть так:

    wp_enqueue_script( 'masonry' );
    
    $masonry_init = 'jQuery(function($) {
    	var $container = $(".masonry-gallery");
    
    	$container.imagesLoaded( function() {
    		$container.masonry({
    			columnWidth: ".masonry-item",
    			itemSelector: ".masonry-item"
    		});
    	});
    });';
    
    wp_add_inline_script( 'masonry', $masonry_init );
    Ответ написан
    Комментировать
  • Как скрыть определенный класс в Wordpress?

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

    if ( current_user_can( 'manage_options' ) ) {
    	// Информация только для админа
    }
    Ответ написан
    Комментировать
  • Как в WordPress получить список категорий со свежими записями в них?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Задача не сама простая, как может показаться на первый взгляд. Дело в том, что мы не знаем заранее сколько нужно заказать постов из базы, которые будут иметь 5 уникальных рубрик. Мы можем заказать все посты и остановить цикл пока не наберем нужные 5, но на больших объемах данных это создаст излишнюю нагрузку

    Я бы пошел таким путем: на хуке save_post мы можно добавлять свежие термины записи в начало массива с помощью array_unshift()

    add_action( 'save_post', 'update_fresh_terms' );
    if ( ! function_exists( 'update_fresh_terms' ) ) {
    	function update_fresh_terms( $post_id ) {
    
    		if ( $_POST['post_type'] === 'post' ) {
    			$fresh_terms = get_option( '_fresh_category', array() );
    
    			// Получаем термины текущего поста.
    			$terms = get_the_terms( $post_id, 'category' );
    
    			if ( is_array( $terms ) ) {
    				foreach ( $terms as $key => $term ) {
    					array_unshift( $fresh_terms, $term->term_id ); // Добавляем id новых терминов в начало массива.
    				}
    			}
    
    			$fresh_terms = array_unique( $fresh_terms );
    
    			update_option( '_fresh_category', $fresh_terms );
    		}
    	}
    }


    Получить термины для использования можно с помощью нативной get_option(). Или же можно создать дополнительную функцию, которая при первом использовании, когда массив с терминами еще пустой, будет делать запрос всех постов из базы и собирать массив терминов по «свежести»

    if ( ! function_exists( 'get_fresh_terms' ) ) {
    	function get_fresh_terms( $count = 5, $post_type = 'post', $term_name = 'category' ) {
    
    		$fresh_terms = get_option( '_fresh_' . $term_name, array() );
    
    		if ( empty( $fresh_terms ) ) {
    
    			// Задаем нужные нам критерии выборки данных из БД.
    			$args = array(
    				'posts_per_page' => -1,
    				'post_type'      => $post_type,
    			);
    
    			$posts = get_posts( $args );
    
    			foreach ( $posts as $key => $post ) {
    
    				// Получаем термины текущего поста.
    				$terms = get_the_terms( $post->ID, $term_name );
    
    				if ( is_array( $terms ) ) {
    					foreach ( $terms as $key => $term ) {
    						$fresh_terms[] = $term->term_id;
    					}
    				}
    			}
    
    			$fresh_terms = array_unique( $fresh_terms );
    		}
    
    		// Если запрос не дал ни одной категории, возвращаем false.
    		if ( empty( $fresh_terms ) ) {
    			return false;
    		} else {
    			update_option( '_fresh_' . $term_name, $fresh_terms );
    		}
    
    		return $fresh_terms;
    	}
    }
    Ответ написан
    1 комментарий
  • HTML-карта сайта - Как вывести родительские, дочерние и остальные страницы?

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

    // Задаем нужные нам критерии выборки данных из БД.
    $args = array(
    	'posts_per_page' => -1,
    	'post_type'      => 'page',
    );
    
    $pages   = get_posts( $args );
    $outer   = array();
    $parents = array();
    
    // Собираем списки страниц в отдельный массив.
    foreach ( $pages as $key => $page ) {
    
    	$outer[ $page->post_parent ][ $page->ID ]['title'] = $page->post_title;
    	$outer[ $page->post_parent ][ $page->ID ]['link']  = get_permalink( $page->ID );
    
    	$parents[] = $page->post_parent;
    
    }
    
    echo '<div class="row">';
    
    // Основной цикл.
    foreach ( $outer as $key => $inner ) {
    	echo '<div class="article-column col-12 col-sm-6 col-lg-4 col-xl-3">';
    
    		// Верхний заголовок без ссылки.
    		if ( $key === 0 ) {
    			echo '<h3>Остальные страницы</h3>';
    		} else {
    			echo '<h3>' . $outer[0][ $key ]['title'] . '</h3>';
    		}
    
    		echo '<ul class="article-list">';
    			foreach ( $inner as $key => $value ) {
    				if ( ! in_array( $key, $parents, true ) ) {
    					echo '<li class="article-list--item">';
    						echo '<a class="article-list--link" href="' . $value['link'] . '">' . $value['title'] . '</a>';
    					echo '</li>';
    				}
    			}
    		echo '</ul>';
    	echo '</div>';
    }
    
    echo '</div>';
    Ответ написан
    4 комментария
  • Где взять счётчик читателей Wordpress для каждого автора?

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



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

    Если по каким-то причинам вас не устраивают эти плагины, то есть еще один способ — вместо плагина вы можете доставать данные с Api Яндекс Метрики или Гугл Аналитики и выводить их как и где вам нужно
    Ответ написан
  • Как сортировать грамотно записи WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете распарсить заголовок регулярками, положить значение int в мета-поле и сортировать по этому значению, как по числу. Тогда сортировка точно будет работать корректно
    Ответ написан
    2 комментария
  • Как изменить строку над хедером?

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

    PS. Номер телефона я бы все же внимательнее поискал в настройках, эта опция должна где-то изменяться
    Ответ написан
    Комментировать
  • Как в кастомной таксономии сделать выделение активной категории?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можете проверять текущий объект через get_queried_object()

    $categories = get_categories( array( 'taxonomy' => 'work-products', 'hide_empty' => false ) );
    foreach ( $categories as $key => $cat ) {
    	if ( get_queried_object_id() === $cat->term_id ) {
    		echo '<a class="active" href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
    	} else {
    		echo '<a href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
    	}
    }
    Ответ написан
    Комментировать
  • Как выполнить php скрипт после редиректа wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Передавайте гет-параметр в ссылке
    Ответ написан
  • На чем проще сделать магазин, на opencart или wordpress?

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


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

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    По умолчанию в WordPress нет никакого счетчика просмотров. Этот функционал добавляет либо тема, либо плагин. В вашем случае вероятнее всего это зависит от выбранной темы. Их писали разные разработчики, которые использовали разные названия мета-полей, способ их получения и вывода во фронт
    Ответ написан
    Комментировать
  • Как спрятать последний пост WP?

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

    function wpb_exclude_from_main_query( $query ) {
    
    	if ( ! is_admin() && $query->is_main_query() ) {
    
    		$args = array(
    			'numberposts' => 1,
    			'post_type'   => 'post',
    			'post_status' => 'publish',
    		);
    
    		$recent_posts = wp_get_recent_posts( $args );
    
    		if ( is_array( $recent_posts ) && ! empty( $recent_posts ) ) {
    
    			$exclude_ids = array();
    
    			foreach ( $recent_posts as $key => $recent_post ) {
    				$exclude_ids[] = $recent_post['ID'];
    			}
    
    			$query->set( 'post__not_in', $exclude_ids );
    		}
    	}
    }
    add_action( 'pre_get_posts', 'wpb_exclude_from_main_query' );
    Ответ написан
    3 комментария
  • Как скрыть категорию в portfolio в wordpress-е ??

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

    Еще одна из вероятных причин в том, что вы находитесь не на странице, которая отвечает проверке is_home(). Этот условный тег проверяет показывается ли страница с последними постами, зависит от настроек параметров Чтение → Показывать последние записи сайта
    Ответ написан
    2 комментария
  • Как убрать с сайта страницу рубрики?

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

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