• Как связать 2 таксономии?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Обычно это делается через гет-запросы. Например у вас ссылка /repair/?brand=rus, на хуке pre_get_posts проверяете таксономию и гет-переменную и фильтруете записи для вывода

    Для корректной работы переменную нужно зарегистрировать, если ее нет

    add_filter( 'query_vars', 'add_query_vars' );
    function add_query_vars( $qvars ) {
    	$qvars[] = 'brand';
    	return $qvars;
    }


    Добавить в ссылку гет-переменную можно с помощью функции add_query_arg()

    $link = add_query_arg( [ 'brand' => 'rus' ], $cur_link );


    Получить гет-запрос можно с помощью get_query_var() и отфильтровать по примеру

    add_action( 'pre_get_posts', 'filter_pre_get_posts', 1 );
    function filter_pre_get_posts( $query ) {
    
    	// Выходим, если это админ-панель или не основной запрос
    	if ( is_admin() || ! $query->is_main_query() ) {
    		return;
    	}
    
    	// Выбираем записи с GET запросами brand
    	if ( $query->is_tax( 'repair' ) && get_query_var( 'brand', false ) ) {
    		
    		$tax_query = [];
    
    		$tax_query['tax_query'][] = [
    			'taxonomy' => 'brands',
    			'field' => 'slug',
    			'terms' => get_query_var( 'brand', false ),
    		];
    
    		$query->set( 'tax_query', $tax_query );
    
    	}
    
    }
    Ответ написан
    4 комментария
  • Список адресов на карте по городам + wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно реализовать с помощью api яндекс карт, вот пример как добавлять множество меток. По такому же принципу можно сделать в mapbox и, возможно, в google maps

    В WordPress создаете у типа записи мета-поле geo_location, пишите в него широту/долготу, запросом wp_query() делаете выборку записей, собираете координаты в json по шаблону из документации и передаете скрипту карты на вывод
    Ответ написан
    2 комментария
  • Почему не считывается ID категории?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Потому что location-categories у вас это таксономия, а не категория и собирать ее нужно с помощью массива tax_query

    $args = [
    	'post_type' => 'location',
    	'orderby'   => 'name',
    	'order'     => 'ASC',
    	'tax_query' => [
    		'relation' => 'AND',
    		[
    			'taxonomy' => $category->taxonomy,
    			'field'    => 'id',
    			'terms'    => $category->term_id
    		]
    	]
    ];
    
    $locations = get_posts( $args );
    Ответ написан
    1 комментарий
  • Как записать путь до медиафайлов wordpress через php?

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

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

    // переключаемся на блог 1
    switch_to_blog( 1 );
    
    // задаем нужные нам критерии выборки данных из БД
    $args = array(
    	'posts_per_page' => 5,
    	'post_type' => 'post',
    	'orderby' => 'comment_count'
    );
    
    $query = new WP_Query( $args );
    
    // Цикл
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    		echo '<h2>' . get_the_title() . '</h2>';
    	}
    } else {
    	// Постов не найдено
    }
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    
    // возвращемся к текущему блогу
    restore_current_blog();


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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В шаблоне author.php в глобальном запросе $wp_query есть посты каждого пользователя
    Ответ написан
    Комментировать
  • Как создать меню в WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Дополню ответ Антон Литвиненко. Если у вас полностью кастомная верстка, то проще всего получить массив элементов с помощью wp_get_nav_menu_object() и вывести произвольным циклом. Получить можно по названию:

    $menu_name = 'Menu';
    $nav_menu = wp_get_nav_menu_object( $menu_name );
    
    if ( !$nav_menu ) {
    	$menu_id = wp_create_nav_menu( $menu_name );
    } else {
    	$menu_id = $nav_menu->term_id;
    }
    
    // получаем элементы меню
    $nav_menu_items = wp_get_nav_menu_items( $menu_id );


    По зарегистрированной локации:
    $menu_location = 'primary';
    $locations = get_nav_menu_locations();
    
    if ( isset( $locations[$menu_location] ) ) {
    	$nav_menu_items = wp_get_nav_menu_items( $locations[$menu_location] );
    }
    Ответ написан
    1 комментарий
  • Как запустить transition_post_status?

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

    add_action( 'save_post', 'custom_save_post' );
    function custom_save_post( $post_id ) {
    
    	// добавляем стартовое кол-во просмотров для всех публикуемых страниц
    	add_post_meta( $post_id, 'views', random_int(20, 50), true );
    	
    }
    Ответ написан
    1 комментарий
  • Что выполняет данная функция и как добавить условие?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Интересные у вас азы) Можно чуть сократить с помощью проверки текущего post_type в массиве

    add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) {
    	if ( in_array( $post->post_type, ['post', 'event'] ) && 'publish' === $new_status ) {
    		delete_transient( self::$cache_filed );
    	}
    }, 10, 3 );
    Ответ написан
    2 комментария
  • Как сделать вывод иерархически рубрик кастомной таксономии?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    wp_list_categories() отдаст вам список только со своей, готовой версткой

    Вы можете использовать фильтр wp_list_categories, чтобы отредактировать вывод верстки запроса или создать собственный запрос get_terms() и написать свою верстку так, как вам нужно
    Ответ написан
    Комментировать
  • Как написать функцию на php которая будет выводить js и html?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно добавить дополнительный javascript код к зарегистрированному скрипту с помощью wp_add_inline_script(). Пример:

    add_action( 'wp_enqueue_scripts', 'masonry_init_scripts' );
    function masonry_init_scripts() {
    
    	wp_enqueue_script('masonry');
    
    	$masonry_init = 'jQuery(function($) {
    		var $container = $(".masonry-container");
    		$container.imagesLoaded( function() {
    			$container.masonry({
    				columnWidth: ".masonry-item",
    				itemSelector: ".masonry-item"
    			});
    		});
    	});';
    
    	wp_add_inline_script( 'masonry', $masonry_init );
    
    }
    Ответ написан
    Комментировать
  • Парсинг статей на wordpress сайт с переводом из RSS. реально ли?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Как-то можно. Есть api:
    Ответ написан
    Комментировать
  • Как вывести поля carbon fields?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Потому что не $query, а $post

    $dates = carbon_get_post_meta( $post->ID, 'short-list', 'complex' );
    Ответ написан
    Комментировать
  • Верный ли порядок интеграции на wp+woocommerc?

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

    Практически всегда вам будет проще стилизовать те классы, которые уже предлагает WP, чем пытаться переписать исходную верстку

    Лично я разбиваю стили на несколько файлов: _typography.sass, _forms.sass, _menu.sass, _widgets.sass, галпом собираю в один минифицированный

    Что касается структуры шаблонов WooCommerce, то правильнее вносить изменения через фильтры и хуки, и только в последнюю очередь копировать шаблоны в тему для изменений
    Ответ написан
    Комментировать
  • Как вывести результаты поиска кастомной записи на произвольной странице?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Дополню ответ Антон Литвиненко. Если вам нужно отсортировать посты по типу, это можно сделать на фильтре pre_get_posts

    add_action( 'pre_get_posts', 'pre_search_filter' );
    function pre_search_filter( $query ){
    
    	if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
    		$query->set( 'orderby', 'type' );
    	}
    	
    }
    Ответ написан
    Комментировать
  • Как скрыть категорию со всего сайта?

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

    function wc_custom_sort_get_terms_args( $args, $taxonomies ) {
        if ( isset( $taxonomies[ 'product_cat' ] ) ) {
            $args['exclude'] = [5,6,7];
        }
     
        return $args;
    }
    add_filter( 'get_terms_args', 'wc_custom_sort_get_terms_args', 10, 2 );
    Ответ написан
  • Как скрыть поле если оно не заполнено?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( $ozon_ru_link = get_field( 'ozon_ru_link' ) ) {
    	echo '<a class="pokypka" href="' . $ozon_ru_link . '" rel="nofollow" target="_blank"></a>';
    }
    Ответ написан
    Комментировать
  • Как выполнить проверку на рубрику и ее подрубрики wordpress?

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

    $term_id = 6;
    
    if ( $terms = get_subterms_by_parent_id( $term_id ) ) {
    	array_push( $terms, $term_id );
    } else {
    	$terms[] = $term_id;
    }
    
    if ( is_category( $terms ) ) {
    	// код...
    }
    
    
    
    
    
    function get_subterms_by_parent_id( $id, $taxonomy = 'category' ) {
    
    	$terms = get_terms( array(
    		'taxonomy' => $taxonomy,
    		'fields' => 'ids',
    		'hide_empty' => true,
    		'parent' => $id // or 
    		//'child_of' => $id // to target not only direct children
    	) );
    
    	if ( !is_array( $terms ) ) {
    		return false;
    	}
    
    	return $terms;
    
    }
    Ответ написан
    Комментировать
  • Как перенести кнопку оформление заказа wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Шаблон вывода этой части магазина находится по адресу templates/cart/mini-cart.php. woocommerce_widget_shopping_cart_buttons — хук, который выводит кнопки

    624aa858df250782764015.png

    Т.к. в этом коде нельзя перенести всю обертку с кнопками в другое место шаблона, то единственный вариант, это перенести шаблон в код вашей темы. Скопируйте шаблон по адресу yourtheme/woocommerce/cart/mini-cart.php и перенесите нужные вам хуки с оберткой в другое место шаблона

    Кстати, корзину лучше просто нормально стилизовать, потому что нормальный порядок, это когда сначала идет список товаров и в конце общая цена с кнопками, а не наоборот

    624ac69ea5d2d555925371.png
    Ответ написан
    Комментировать
  • Как привязать якори к определенным переключателям?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    У вас сломан сайт по ссылке, но на сколько я понимаю, у вас там табы, на них якоря работать не будут как по ссылкам. Активный таб устанавливается с помощью добавления класса active как к табу, так и к контенту таба. У вашей задачи есть два решения — на php и на js

    Регистрируете дополнительный параметр в query_vars

    add_filter( 'query_vars', 'add_query_vars' );
    function add_query_vars( $qvars ) {
    	$qvars[] = 'tab';
    	return $qvars;
    }


    Ссылку с активным табом можно собрать так

    $url = add_query_arg( [ 'tab' => '2' ], home_url( '/' ) ); // Получится ссылка вида https://example.loc/?tab=2


    Получить номер активного таба можно с помощью get_query_var(), при выводе проверяете его номер и присваиваете соответствующий класс

    $active_tab = get_query_var( 'tab', 1 );
    
    $tabs = ['О компании', 'Услуги', 'Портфолио'];
    foreach ( $tabs as $key => $tab ) {
    	if ( $key == $active_tab ) {
    		echo '<div class="tab active">';
    	} else {
    		echo '<div class="tab">';
    	}
    }


    Всю последнюю часть, которая добавляет активный класс исходя из ссылки можно переписать на js
    Ответ написан
    Комментировать