• Как делать такие фильтры на wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    1. Регистрируете гет-переменные

    add_filter( 'query_vars', 'add_query_vars' );
    function add_query_vars( $qvars ) {
    
      $qvars[] = 'location';
      $qvars[] = 'from';
      $qvars[] = 'to';
      $qvars[] = 'type';
    
      return $qvars;
    }


    2. Собираете и выводите html-форму

    <form method="get" class="block obj-filter">
      <div class="row d-flex align-items-center">
        <div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
          <input type="text" name="location" id="location" class="obj-filter-input" value="">
        </div>
        <div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
          <input type="date" name="from" id="from" class="obj-filter-input" value="">
        </div>
        <div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
          <input type="date" name="to" id="to" class="obj-filter-input" value="">
        </div>
        <div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
          <select name="type" id="type" class="obj-select">
            <option value="solo">Один взрослый</option>
            <option value="two-adults">Два взрослых</option>
            <option value="family">Двое взрослых + ребенок</option>
          </select>
        </div>
        <div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
          <input id="obj-filter-submit" type="submit" class="button" value="Фильтровать">
        </div>
      </div>
    </form>


    3. При нажатии кнопки Фильтровать страница перезагружается, вы получаете ссылку такого вида

    https://example.loc/?location=yerevan&from=2807&to=0408&type=solo


    На хуке pre_get_posts можно поправить основной запрос вытянув данные из гет-параметров. Вам нужно установить новые tax_query или meta_query в зависимости от логики сайта

    add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
    function custom_pre_get_posts( $query ) {
      // Выходим, если это админ-панель или не основной запрос.
      if ( is_admin() || ! $query->is_main_query() )
        return;
    
      // предположим, что это таксономия с машинами
      if ( $query->is_tax( 'location' ) ) {
        
        $meta = array();
        $meta['meta_query']['relation'] = 'AND';
    
        // выбираем записи с GET запросами
        $query_vars = array( 'location', 'from', 'to', 'type' );
        foreach ( $query_vars as $key => $query_var ) {
          if ( $var = get_query_var( $query_var, false ) ) {
            // Тут пишем логику по которой собирается переменная meta_query и/или tax_query
          }
        }
        $query->set( 'meta_query', $meta );
      }
    }
    Ответ написан
    Комментировать
  • Можно ли уже готовый наполненный сайт посадить на вп?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно, но вам придется написать для сайта тему и спарсить/заполнить контент в базу данных
    Ответ написан
    Комментировать
  • Как сделать универсальную категорию Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы и правда делаете что-то не то, посмотрите иерархию шаблонов, выберете наиболее подходящий и используйте его. В каждом шаблоне уже есть глобальный запрос, дополнительный запрос get_posts() или get_terms() делать не нужно
    Ответ написан
    Комментировать
  • Как добавить слайдер к custom post?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Бесплатная альтернатива ACF — Carbon Fields
    Ответ написан
    1 комментарий
  • Как проще всего сделать в wordpress?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    У вас два варианта: ajax и не ajax

    В первом случае передаете параметры сортировки на сервер, составляете там новый запрос, возвращаете html и подменяете всю плитку товаров

    Во втором, у вас будет перезагружаться страница и вам нужно переписать шорткоды на код, чтобы аргументы запроса были в теле страницы. При перезагрузке страницы проверяете GET или POST параметры и подменяете нужные запросы
    Ответ написан
    Комментировать
  • Если установить нелицензионный плагин, а затем удалить его, останутся ли в коде «следы» и повлияет ли это на 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 ] );
    }
    Ответ написан
    Комментировать
  • Нужно ли вставлять переменные в 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 ленте, оно никак не влияет на вывод изображений на сайте
    Ответ написан