Ответы пользователя по тегу WordPress
  • Если установить нелицензионный плагин, а затем удалить его, останутся ли в коде «следы» и повлияет ли это на SEO?

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

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

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

    Яндекс карты хорошо определяют положение пользователя. Тут пример как это делать по IP и по браузеру https://yandex.ru/dev/maps/jsbox/2.1/geolocation
    Ответ написан
    Комментировать
  • Реализация поиска элементов на WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Там есть поиск по своим объектам https://yandex.ru/dev/maps/jsbox/2.1/custom_search
    Ответ написан
    Комментировать
  • Проблема с циклом постов?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( get_post_type() === 'article' ) {
    	get_template_part( 'templates/search', 'article' );
    } else {
    	get_template_part( 'templates/search', 'item' );
    }
    Ответ написан
    Комментировать
  • Как сделать так, чтобы выбранные фильтры отображались в URL в одном порядке?

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

    example.com/catalog/clothing?gender=man&brand=mammut&color=white


    Url можно формировать с помощью add_query_arg()

    $url = 'https://site.ru/';
    $url = add_query_arg( array( 'gender' => 'man', 'brand' => 'mammut', 'color' => 'white' ), $url );
    Ответ написан
    Комментировать
  • Как скрыть элемент на странице wordpress для всех кроме админа?

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

    if ( current_user_can( 'manage_options' ) ) {
    	// Только для админа.
    }
    Ответ написан
  • Url вида ?page_id = свой ид?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Структура ссылок в WordPress это большая головная боль. Добавить новое правило перезаписи URL (ЧПУ) в структуру правил WordPress можно с помощью add_rewrite_rule()

    Есть еще костыльный способ: создать ссылку с помощью add_query_arg() и подключать нужный шаблон при проверке get_query_var()

    $url = 'https://site.ru/';
    $url = add_query_arg( array( 'page_id' => '5302' ), $url ); // https://site.ru/?page_id=5302
    
    if ( $page_id = get_query_var( 'page_id' ) ) {
    	get_template_part( 'templates/page', 'simple', array( 'page_id' => $page_id ) );
    } else {
    
    }
    Ответ написан
  • При подключений PHP файлов сайт не работает, как можно исправить?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    При подключений PHP файлов сайт не работает


    Значит файла по подключаемому пути не существует

    сами php файлы у меня в директории сайта находятся


    В WordPress кастомные файлы не должны лежать в директории сайта. Для этого существует папка с вашей темой и плагины. В functions.php файлы подключатся следующим образом

    require_once ( ABSPATH . 'wp-admin/includes/plugin.php' );
    require_once get_stylesheet_directory() . '/includes/setup.php';
    Ответ написан
  • Как вывести конкретный пункт меню из меню?

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

    // Получаем элементы меню по 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 ] );
    }
    Ответ написан
    Комментировать
  • Как убрать дублирование кода 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 комментария