Ответы пользователя по тегу WordPress
  • Есть ли примеры фильтра по мета полям пользователей в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Думаю вам стоит открыть документацию по функции get_users() и посмотреть какие аргументы она принимает

    Особое внимание стоит обратить на параметры:

    • 'meta_key'
    • 'meta_value'
    • 'meta_compare'
    • 'meta_query'


    Если вам нужно получить только количество пользователей, рекомендую использовать аргумент fields = ID, так вы получить только ID пользователей, а не все данные юзеров, которые для дальнейшей работы вам не нужны
    Ответ написан
    Комментировать
  • Как правильно реализовать фильтр произвольных типов записей на WP?

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

    Получить элементы таксономий можно с помощью запроса get_terms()

    $terms = get_terms( [
    	'taxonomy' => 'genres',
    	'hide_empty' => false,
    ] );
    
    if ( $terms ) {
    	echo '<ul class="genres-list">';
    	foreach ( $terms as $key => $term ) {
    		echo '<li><a href="' . get_term_link( $term->term_id, $term->taxonomy ) . '">' . $term->name . '</a></li>';
    	}
    	echo '</ul>';
    }


    Так же, перед запросом вы можете проверить, что находитесь на архивной странице записей произвольного типа

    if ( is_post_type_archive( 'book' ) ) {
    	// ...
    }
    Ответ написан
    Комментировать
  • Как в вордпресс получить даты публикаций постов по годам?

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

    $year = 2008;
    $current_year = date( 'Y' );
    
    echo '<ul>';
    
    while ( $year <= $current_year ) {
    	echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
    	$year++;
    }
    
    echo '</ul>';


    Если все-таки нужно проверять существование постов, то можете запрашивать один, из каждого года таким образом:

    $year = 2008;
    $current_year = date( 'Y' );
    
    echo '<ul>';
    
    while ( $year <= $current_year ) {
    
    	$args = array(
    		'year'        => $year,
    		'post_status' => 'publish, future, draft, pending',
    		'posts_per_page' => 1,
    		'fields' => 'ids'
    	);
    
    	$posts = get_posts( $args );
    
    	if ( is_array( $posts ) && !empty( $posts ) ) {
    		echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
    	}
    
    	$year++;
    }
    echo '</ul>';


    Если вы заранее не знаете в котором году был опубликован первый пост, его можно получить с помощью сортировки ASC

    $args = array(
    	'posts_per_page' => 1,
    	'order' => 'ASC'
    );
    
    $posts = get_posts( $args );
    
    if ( $posts ) {
    	$year = date( 'Y', strtotime( $posts[0]->post_date ) );
    }


    PS. Если у вас не посты, а другой тип записи, нужно указывать аргумент post_type
    Ответ написан
    Комментировать
  • Как приостановить работу плагина после 2 уровня вложенности?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно исключить все, что содержит подстроку wp-
    Можно исключить все, что содержит более 2 слешей

    Слишком мало данных, чтобы решить вашу задачу. Лучше всего напечатать все ссылки на экране и разными типовыми регулярками по очереди избавляться от ненужных
    Ответ написан
    Комментировать
  • Как перевести строки, где в самом предложении html теги?

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

    $ani = '25';
    echo '<span class="advantage__text-green">' . $ani . '&nbsp;' . pll__( 'ani' ) . '</span>' . pll__( 'experiență pe piață' );


    Нужно продумать множественную/единственную форму числа (1 год, 2 года, 25 лет). На сколько я знаю в pll таких функций нет и лучше делать перевод с помощью нативных _n() и _x(), производной _nx(), а так же базовых __() и esc_html__()

    По правилам хорошего тона оригинальный текст нужно писать на английском и с него делать переводы на нужные вам языки
    Ответ написан
    Комментировать
  • Не работает the_field acf?

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

    В этом параметре так же можно передавать значение option или options, если поля создавались для общей страницы настроек

    И научитесь печатать переменные, так вы будете понимать какие значения у вас находятся в базе

    var_dump( get_field( 'header-descr-strong' ) );
    Ответ написан
    Комментировать
  • Как создать/обновить кастомное поле (игнорируя настройки плагина этого поля) wordpress?

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

    $array = [
    	'group_price' => '3.6',
    	'group_price_type' => 'fix',
    ];
    echo serialize( $array );


    Для работы с подобными данными вам еще пригодятся функции json_decode() и json_encode()
    Ответ написан
    Комментировать
  • Как правильно вставлять код в классический редактор wordpress?

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

    Пишите полный путь до изображения, строку с шорткодом без функции do_shortcode()
    Ответ написан
    Комментировать
  • Как в Wordpress запретить подписчикам смотреть свой профиль пользователя, но разрешить просматривать профиль авторов?

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

    global $authordata;
    
    // проверяем, что находимся в своем личном кабинете и имеем роль subscriber
    if ( is_author() && is_user_logged_in() && is_object( $authordata ) && in_array( 'subscriber', $authordata->roles ) && $authordata->data->ID == get_current_user_id() ) {
    
    }
    Ответ написан
    Комментировать
  • Есть похожая тема WP?

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

    622a486a2ddf2901001089.jpeg
    Ответ написан
    Комментировать
  • Какие элементы можно или даже нужно не натягивать на wp?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Проще всего сделать простой счетчик на js передавать в data-атрибут кнопки формы, которая отвечает за дальнейшую обработку. Тащить WooCommerce для такой задачи достаточно дико
    Ответ написан
    Комментировать
  • Как вывести контент записи по клику на её заголовок?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вам нельзя использовать query_posts(), это глобальный запрос, который используется ядром WP, вы его сломаете. Для запросов используйте wp_query()

    echo перед the_field() не используется

    По существу, вы можете вывести контент сразу, большого смысла слать ajax-запросы нет

    <div class="swiper-slide swiper-slidet">
    	<span class="tab-time">
    		<?php the_field('date'); ?>
    	</span>
    	<div class="tab-content">
    		<?php the_content(); ?>
    	</div>
    </div>


    Клик по датам, это обычные табы, в интернетах огромное количество гайдов, как их реализовать. Примеры на codepen
    Ответ написан
  • Как реализовать добавление/удаление элементов через админку (может как-то в acf)?

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

    Тем не менее в ACF PRO есть repeater, с помощью которого можно реализовать добавление/удаление повторяющихся элементов
    Ответ написан
  • Как менять надпись на кнопе или просто надпись после нажатия?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    PHP:
    $cities_names = ['Новокрибирск', 'Керамзин', 'Ос Альта', 'Новый Зем'];
    
    echo '<span id="city-name">' . $cities_names[0] . '</span>';
    
    echo '<select id="cities" name="cities" class="selector">';
    foreach ( $cities_names as $keyC => $cities_name  ) {
    	echo '<option value="' . $cities_name . '">' . $cities_name . '</option>';
    }
    echo '</select>';


    JQ:
    jQuery(document).ready(function ($) {
    
    	// устанавливаем значение из localStorage, если оно есть
    	var cityData = localStorage.getItem( 'cityData' );
    	if ( null !== cityData ) {
    		$( '#city-name' ).html( cityData );
    	}
    
    	// функция изменения селекта
    	$( '.selector' ).change( function(e) { 
    
    		var value = $(this).val();
    
    		$( '#city-name' ).html( value ); // меняем город
    		localStorage.setItem( 'cityData', value ); // добавляем его localStorage
    
    	});
    
    });
    Ответ написан
    Комментировать
  • Как в ACF Wordpress вывести значение типа поля Записи с содержимым этой записи?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Шорткод должен возвращать return, а не выводить echo
    Ответ написан
    Комментировать
  • Как вывести последний комментарий в превью?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $args = array(
    	'number' => '1',
    	'post_id' => $post->ID
    );
    
    $comments = get_comments( $args );
    
    foreach ( $comments as $key => $comment ) {
    	echo $comment->comment_content;
    }
    Ответ написан
  • Как сделать навигацию по страницам цифрами?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Функции next_posts_link() и previous_posts_link() будут брать данные только из глобального запроса. Даже если вы укажите в кастомном запросе showposts=5, эти функции все равно будут считать, что на странице выводятся по 10 постов (берут данные из глобальных настроек)

    Цифровую навигацию можете вывести с помощью the_posts_pagination(), тоже работает только с глобальным объектом

    Для создания пагинации кастомного запроса смотрите тут
    Ответ написан
    Комментировать
  • Как сделать так, чтобы после 2 "записи" выводился другой блок?

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

    Если вас не устраивает ограничение на кол-во постов в настройках, вы можете изменить это значение для отдельных запросов на хуке pre_get_posts

    add_action( 'pre_get_posts', 'wpz_home_pagesize', 1 );
    function wpz_home_pagesize( $query ) {
    
    	// Выходим, если это админ-панель или не основной запрос.
    	if ( is_admin() || !$query->is_main_query() )
    		return;
    
    	// Выводим только 5 постов на главной странице
    	if ( is_home() ) {
    		$query->set( 'posts_per_page', 5 );
    	}
    
    }


    Вывести блок с дополнительной информацией после каждого пятого поста можно с помощью простого счетчика

    $i = 1;
    while ( have_posts() ) :
    	the_post();
    
    	get_template_part( 'template-parts/content', get_post_format() );
    
    	// после каждого пятого поста выводим баннер
    	if ( is_int( $i++ / 5 ) ) {
    		get_template_part( 'template-parts/content', 'offer' );
    	}
    
    endwhile;
    Ответ написан
    3 комментария