• Как вывести поля 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
    Ответ написан
    Комментировать
  • Как сделать перенаправление в мой аккаунт?

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

    add_filter( 'login_redirect', 'login_redirect', 10, 3 );
    function login_redirect( $redirect_to, $request, $user ) {
    
    	if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
    		return get_edit_user_link( $user->ID );
    	}
    
    	return $redirect_to;
    }


    Так же в WooCommerce есть свой хук woocommerce_login_redirect, можете попробовать использовать его

    add_filter( 'woocommerce_login_redirect', 'filter_function_name_7289', 10, 2 );
    function filter_function_name_7289( $remove_query_arg, $user ){
    	// filter...
    
    	return $remove_query_arg;
    }
    Ответ написан
    2 комментария
  • Как сделать страницу Wordpress для незарегистрированных?

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

    add_action( 'template_redirect', 'unregistered_user_redirect' );
    function unregistered_user_redirect() {
    
    	if ( !is_home() && !is_front_page() && !is_user_logged_in() ) {
    		wp_redirect( home_url(), 301 );
    	}
    
    }
    Ответ написан
    Комментировать
  • Как разобрать такую строку {i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}?

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

    var_dump( get_option( 'rewrite_rules', false ) );
    var_dump( get_option( 'widget_categories', false ) );
    var_dump( get_option( 'wp_user_roles', false ) );
    var_dump( get_option( 'cron', false ) );
    var_dump( get_post_meta( get_the_ID(), '_schema_json', true ) );
    Ответ написан
    2 комментария
  • WP не работате скрипт от вcтроенного jquery?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    6247119aba988799088886.png

    Причина в этом, зачем вы вообще подключаете свой jquery, если он и так подключается версией 3.6.0 по умолчанию?
    Ответ написан
  • Как понять внутри цикла WordPress и снаружи цикла?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    while ( have_posts() ) — это цикл перебора постов из глобального запроса
    the_post() — функция устанавливает переменную $post для работы функций the_title(), the_content() и подобные

    Если цикл образуется с помощью экземпляра WP_Query(), то и переменные устанавливаются из этого же запроса ( $query->have_posts(), $query->the_post() )

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


    get_posts() — это обертка для класса WP_Query с несколькими предустановленными параметрами. Установка переменной $post делается с помощью функции setup_postdata() и в целом тот же цикл выглядит немного по другому

    // Задаем нужные нам критерии выборки данных из БД
    $args = array(
    	'posts_per_page' => 5,
    	'orderby' => 'comment_count'
    );
    
    
    $my_posts = get_posts( $args );
    
    // Цикл
    if ( $my_posts ) {
    	foreach ( $my_posts as $key => $post ) {
    		setup_postdata( $post );
    
    		the_title(); // Заголовок
    		the_content(); // Контент
    	}
    } else {
    	// Постов не найдено
    }
    
    // Возвращаем оригинальные данные поста. Сбрасываем $post
    wp_reset_postdata();


    Еще раз хочу акцентировать внимание на том, что установка переменной $post нужна для работы функций the_title(), the_content(), get_template_part() и т.д., вместо их использования вы можете доставать данные напрямую из объекта. Например, такая конструкция тоже будет работать

    $args = array(
    	'posts_per_page' => 5,
    	'orderby' => 'comment_count'
    );
    
    $my_posts = get_posts( $args );
    
    foreach ( $my_posts as $key => $post ) {
    
    	echo $post->post_title; // Заголовок
    	echo  $post->post_content; // Контент
    
    }
    Ответ написан
    1 комментарий
  • Вывод записей по фильтру 2х таксономий?

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

    $args = [
    	'post_type' => 'info',
    	'posts_per_page' => 24,
    	'tax_query' => [
    		'relation' => 'AND',
    		[
    			'taxonomy' => 'city',
    			'field' => 'name',
    			'terms' => [ 'Рязань' ]
    		],
    		[
    			'taxonomy' => 'categ',
    			'field' => 'name',
    			'terms' => [ 'МВД' ]
    		]
    	]
    ];
    
    $query = new WP_Query( $args );
    
    // Цикл.
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    		
    		the_title(); // выводим заголовок
    
    	}
    } else {
    	// Постов не найдено
    }
    
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    Ответ написан
    3 комментария
  • Как в functions.php подключать php файлы(WordPress)?

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

    require_once get_template_directory() . '/inc/simple_html_dom.php';
    Ответ написан
    Комментировать
  • Как вывести все картинки из поста в определенное место?

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

    Отвечая на ваш вопрос, содержание контента можно получить с помощью функции get_the_content(). Универсальных методов решения вашей задачи НЕТ. Вы можете разобрать строку регулярками или использовать какой-нибудь DOM-парсер, например Simple HTML DOM Parser

    После этих операций, если вам понадобится убрать какой-либо контент до вывода на экран, вы можете использовать фильтр the_content

    add_filter( 'the_content', 'filter_function_name_11' );
    function filter_function_name_11( $content ) {
    	// Фильтр...
    
    	return $content;
    }
    Ответ написан
    3 комментария
  • Вывести таксономии текущей страницы?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    get_the_terms() — получает элементы таксономии (термины), которые относятся к указанному посту (записи)

    Использование

    $terms = get_the_terms( $post->ID, 'city' );
    if( is_array( $terms ) ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<a href="' . get_term_link( $term->term_id, $term->taxonomy ) . '">' . $term->name . '</a>,';
    	}
    }
    Ответ написан
  • Должен ли отступ между абзацами br проставляться автоматически из гутенберга?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Фильтр wpautop заменяет двойной перенос строки на HTML конструкцию <p>...</p>, а одинарный на <br>

    По умолчанию функция применяется к следующим фильтрам:

    add_filter( 'term_description', 'wpautop' );
    add_filter( 'get_the_post_type_description', 'wpautop' );
    add_filter( 'the_content', 'wpautop' );
    add_filter( 'the_excerpt', 'wpautop' );
    add_filter( 'comment_text', 'wpautop', 30 );
    add_filter( 'widget_text_content', 'wpautop' );
    add_filter( 'the_excerpt_embed', 'wpautop' );


    Отключить фильтр можно так:

    remove_filter( 'the_content', 'wpautop' );
    remove_filter( 'the_excerpt', 'wpautop' );
    Ответ написан
    Комментировать
  • Почему не изменяются мета теги в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Потому что поисковый робот еще не посетил вашу измененную страницу и не учел эти изменения в своей базе. Рекомендую добавить sitemap в вебмастер и google search console, так поисковики будут быстрее узнавать об изменениях на вашем сайте
    Ответ написан
    Комментировать
  • Отображение всех категорий на одной странице?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Шаблон для вывода постов это category.php или archive.php, а не blocks.php. Используйте для их код из любой темы twenty или кастомизируйте его

    <?php get_header(); ?>
    
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">
    
    		<?php if ( have_posts() ) : ?>
    
    			<header class="page-header">
    				<?php
    					the_archive_title( '<h1 class="page-title">', '</h1>' );
    					the_archive_description( '<div class="taxonomy-description">', '</div>' );
    				?>
    			</header>
    
    			<?php while ( have_posts() ) :
    				the_post();
    
    				get_template_part( 'template-parts/content', get_post_format() );
    
    			endwhile;
    
    			the_posts_pagination(
    				array(
    					'prev_text'          => __( 'Previous page', 'twentysixteen' ),
    					'next_text'          => __( 'Next page', 'twentysixteen' ),
    					'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
    				)
    			);
    
    		else :
    
    			get_template_part( 'template-parts/content', 'none' );
    
    		endif; ?>
    
    		</main>
    	</div>
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>


    Ссылку на страницу категории с записями можно получить с помощью get_category_link() по переданному $category_id. На будущее вам пригодится иерархия шаблонов WordPress
    Ответ написан