Задать вопрос
Ответы пользователя по тегу WordPress
  • Почему не работает вывод категории записи?

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

    $cur_terms = get_the_terms( get_the_ID(), 'super_grill_recipes_categories' );
    if( is_array( $cur_terms ) ) {
    	echo '<ul class="term-list">';
    	foreach( $cur_terms as $cur_term ){
    		echo '<li class="term-list__item">';
    			echo '<a class="term-list__link" href="'. get_term_link( $cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>';
    		echo '</li>';
    	}
    	echo '</ul>';
    }
    Ответ написан
    Комментировать
  • Как вставить строку перевода в php код?

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

    if ( is_plugin_active( 'polylang/polylang.php' ) ) {
    	$sale = pll__( 'Скидка' );
    } else {
    	$sale = esc_html__( 'Sale!', 'woocommerce' );
    }
    
    echo apply_filters( 'woocommerce_sale_flash', '<span class="onsale">' . $sale . '</span>', $post, $product );
    Ответ написан
    Комментировать
  • Как подключить стили и cкрипты в дочерней теме wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Хук называется wp_enqueue_scripts, а не wp_enqueue_script

    Для подключения файлов есть отличная функция get_theme_file_uri(), которая проверяет наличие файла перед подключением, это довольно удобно

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

    add_action( 'wp_enqueue_scripts', 'my_scripts_slider' );
    function my_scripts_slider() {
    	wp_enqueue_script( 'chifslider1', get_theme_file_uri( 'chifslider/chief-slider.dev.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-slider.dev.js' ) ) );
    	wp_enqueue_script( 'chifslider2', get_theme_file_uri( 'chifslider/chief-int.js' ), array(), filemtime( get_theme_file_path( '/chifslider/chief-int.js' ) ) );
    };


    Подробнее о работе с подключением файлов смотрите здесь
    Ответ написан
    Комментировать
  • Как удалить мета тег robots?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    За вывод этого мета-тега отвечает функция wp_robots(). Yoast, с помощью фильтра может добавлять в нее свои теги. Это правильный способ работы с мета-тегом robots. Если у вас их два, то нужно удалять не его, а искать второй

    Управлять работой этого тега вы можете с помощью одноименного фильтра wp_robots. Например, код ниже добавит noindex на архивные страницы на которых нет постов

    add_filter( 'wp_robots', 'custom_wp_robots' );
    function custom_wp_robots( $robots ) {
    
    	if ( is_archive() && !have_posts() ) {
    		$robots['noindex'] = true;
    		$robots['nofollow'] = true;
    	}
    	
    	return $robots;
    }
    Ответ написан
    Комментировать
  • Как вывести два сайдбара на одной странице??

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

    • Функции wp_mobile() нет, есть wp_is_mobile()
    • С этой функцией все равно не работают большинство плагинов кеширования
    • Стилизацию сайта на мобильной и десктопной версии лучше делать с помощью медиа-запросов в css, тем более у вас сайдбары визуально даже не отличаются
    • С Woocommerce лучше работать с помощью системы хуков и фильтров и только в последнюю очередь изменять шаблоны в теме
    Ответ написан
  • Почему при клике на пользователя меня перебрасывает не на личную страницу?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    404 у вас не из-за этого, эта опция не влияет на кастомные запросы WP_Query(). Скорее всего вы не правильно выводите пагинацию на странице. Приложите весь код или сделайте по этому гайду
    Ответ написан
  • Как wp_insert_post добавить созданный запись к определённой категории?

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

    $post_data = array(
    	'post_type' => 'proconnect',
    	'post_title' => 'testPost',
    	'post_status' => 'publish',
    	'post_author' => 1,
    	'tax_input' => array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ),
    );
    $post_id = wp_insert_post( $post_data );
    Ответ написан
    Комментировать
  • Почему при редиректе выдаёт 404?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    404 означает, что по данному адресу страницы не существует

    6116349b20137868964400.png
    Ответ написан
    Комментировать
  • Как изменить url первой страницы пагинации Wordpress?

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

    • Ищешь в коде функцию, которая выводит пагинацию, разбираешься принимает ли она аргументы, позволяющие ее кастомизировать
    • Если нет, на ее основе пишешь свою пагинацию так, как тебе надо
    • Ставишь тег canonical
    • Ставишь 301 редирект


    PS. Кнопки Первая 1 выглядят бредово
    Ответ написан
    Комментировать
  • Как вывести метаполя на странице автора, если ему присвоена определенная роль?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( is_user_role( 'custom_role' ) ) {
    	echo '<p>' . get_user_meta( get_current_user_id(), 'custom_meta', true )  . '</p>';
    }
    Ответ написан
    Комментировать
  • Какие есть бесплатные сервисы/плагины/скрипты рассылки email для wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть решение на хуке save_post отправлять функцией wp_mail(). Обязательно настроить SMTP. Обязательно писать в мету адреса, кому письмо уже отправлено и перед отправкой проверять, чтобы при обновлении не присылать дважды-трижды одно и то же
    Ответ написан
    Комментировать
  • Плагин массового создания записей для Wordpress есть?

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

    А если у вас есть csv или другой табличный формат данных, то можно воспользоваться платным плагином WP All Import
    Ответ написан
    Комментировать
  • Нужно привязать к кнопке функция изменение главной страницы и меню, как сделать лучше?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Надеюсь вы понимаете, что этот админ бар виден только авторизованным пользователям, он не очень подходит для того, что вы хотите. Кнопки смены сезона или темная/светлая тема уместнее размещать на фронте в header и/или в footer

    Тем не менее вот пример, как можно добавить кнопку в админ бар

    add_action('admin_bar_menu', 'add_season_switcher_item', 100);
    function add_season_switcher_item( $admin_bar ){
    	global $pagenow;
    	$admin_bar->add_menu( array( 'id'=>'season-switcher','title'=>'Season Switcher','href'=>'#' ) );
    }


    А это пример, как можно вывести обработчик для этой кнопки

    add_action( 'admin_footer', 'season_switcher_js' );
    function season_switcher_js() { ?>
    	<script type="text/javascript" >
    		jQuery("li#wp-admin-bar-season-switcher .ab-item").on( "click", function() {
    
    			// код тут
    
    		});
    	</script> <?php
    }
    Ответ написан
  • Как в плагине пройтись по всем постам?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Любой запрос get_posts() или wp_query(), в цикле проверяете то, что вам нужно

    Но это довольно затратное действие, не стоит при каждой загрузке init его выполнять. Вам стоит запускать его либо по нажатию кнопки или крону, либо заменить на проверку наличия только текущего изображения
    Ответ написан
    Комментировать
  • Подключить стили для разных header?

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

    function add_theme_scripts() {
    	if ( is_home() || is_front_page() ) {
    		wp_enqueue_style( 'slyle-home', get_theme_file_uri( 'assets/css/slyle-home.min.css' ) );
    	} else {
    		wp_enqueue_style( 'slyle-page', get_theme_file_uri( 'assets/css/slyle-page.min.css' ) );
    	}
    }
    add_action( 'wp_enqueue_scripts', 'add_theme_scripts' );


    Подробнее об этом в статье: Как правильно подключать стили и cкрипты в WordPress?
    Ответ написан
    Комментировать
  • Нужно заменить картинку на другую?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    return set_post_thubmnail( $post, $thumbnail_id );

    Разумеется в эту функцию должны попадать все данные $has_thumbnail, $post, $thumbnail_id

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

    if ( has_post_thumbnail() ) {
    	$image = get_the_post_thumbnail_url( get_the_ID(), 'large' );
    } else {
    	$image = get_stylesheet_directory_uri() . '/assets/img/default-cover.jpg';
    }
    Ответ написан
  • Как подставлять разные страницы на разных языках?

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

    if ( is_plugin_active( 'polylang/polylang.php' )  ) {
    	$locale = get_locale();
    	$data = [
    		'pl_PL' => [
    			'text' => 'Pobierz<br>katalog',
    			'file' => 'price-pl.xlsx',
    		],
    		'lt_LT' => [
    			'text' => 'Parsisiųsti<br>katalogą',
    			'file' => 'price-lt.xlsx',
    		],
    		'en_US' => [
    			'text' => 'Download<br>catalog',
    			'file' => 'price-en.xlsx',
    		],
    	];
    
    	echo '<div class="catalog-file">';
    	   echo '<a href="' . get_stylesheet_directory_uri() . '/data/' . $data[$locale]['file'] . '" download="' . $data[$locale]['file'] . '">' . $data[$locale]['text'] . '</a>';
    	echo '</div>';
    }


    PS Перед выводом файла уместно сделать проверку на его существование

    if ( file_exists( $file ) && filesize( $file ) > 0  ) {
    	// выводим, если существует
    }
    Ответ написан
    Комментировать
  • Как отстилизовать страницу в WordPress?

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

    Чтобы стилизовать страницы произвольного типа вы можете создать в корне темы шаблон single-service.php, тут подробнее. Вы так же можете использовать проверку if ( get_post_type() === 'service' ) { ... } в любом месте проекта (где определены глобальные переменные)

    А чтобы добавить выбор шаблона, вы должны при его создании перечислить пост тайпы, к которым он относится примерно так:

    /*
    Template Name: Мой шаблон страницы
    Template Post Type: post, page, service
    */
    Ответ написан
    Комментировать
  • Почему выводится товар три раза?

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

    echo '
          <div class="swiper-slide">
          <a href="#">
            <div class="product-slide">
              <div class="product-hearth"><svg class="product-global__hearth"><use xlink:href="img/sprite.svg#hearth-icon"></use></svg></div>
              <div class="product-slide-img"><img src="img/product-img.jpg" alt="" class="product-slide__img"></div>
              <div class="product-global__footer">
                <p class="product-global__autor">Ольга Примаченко</p>
                <h3 class="product-global__title">К себе нежно</h3>
                <div class="product-global__interface">
                  <div class="product-global__price">790</div>
                  <div class="product-global__cart"><svg class="product-global__cart"><use xlink:href="img/sprite.svg#cart-icon"></use></svg></div>
                </div>
              </div>
            </div>
          </a>
          </div>
        ';


    Нужно динамически брать из цикла $loop заголовок, ссылку, изображение, цену и автора используя функции the_title(), the_post_thumbnail(), the_permalink() и т.д.

    А еще правильнее использовать wc_get_template_part( 'content', 'product' );. Советую найти этот шаблон, разобрать и переделать ваш код по спецификации woocommerce

    global $product; и return ob_get_clean(); из вашего кода можно смело удалить, а проверку if ( $loop->have_posts() ) { ... } добавить
    Ответ написан