Ответы пользователя по тегу WordPress
  • Wordpress закрыть рубрику от индексации на главной?

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

    1. Вначале html-документа в прописать мета тег robots со значением noindex
    2. В файле robots.txt прописать правила для поисковых роботов


    Оба варианта запретят поисковым роботам индексировать страницы. И это все равно является рекомендацией, если поисковик сочтет контент полезным, он может проигнорировать указанные правила

    Есть еще тег <noindex>...</noindex>, гугл его игнорирует

    Вы можете запретить роботу переходить по ссылкам указав rel="nofollow", но он все равно найдет эти страницы и проиндексирует, если индексация не запрещена
    Ответ написан
    Комментировать
  • Как лучше оптимизировать сайт с большим количеством картинок?

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

    Лично я сомневаюсь, что вынос изображений на отдельный ресурс даст хоть какой-то результат. Изображения нужно сжать, на странице выводить только подходящего размера (medium, large), удалить неиспользуемые размеры remove_image_size() и нарезать их заново Regenerate Thumbnails

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Зачем вы это делаете? Скопируйте шаблон archive.php из темы twentysixteen и не мучайтесь

    <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><!-- .page-header -->
    
    		<?php
    		// Start the loop.
    		while ( have_posts() ) :
    			the_post();
    
    			/*
    			 * Include the Post-Format-specific template for the content.
    			 * If you want to override this in a child theme, then include a file
    			 * called content-___.php (where ___ is the Post Format name) and that
    			 * will be used instead.
    			 */
    			get_template_part( 'template-parts/content', get_post_format() );
    
    			// End the loop.
    		endwhile;
    
    		// Previous/next page navigation.
    		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>',
    			)
    		);
    
    		// If no content, include the "No posts found" template.
    	else :
    		get_template_part( 'template-parts/content', 'none' );
    
    	endif;
    	?>
    
    </main><!-- .site-main -->
    Ответ написан
  • Как сделать 301 редирект с Url с get параметрами на url без параметров, но содержащего значения из них?

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

    if ( isset( $_GET['id'] ) ) {
    	$id = $_GET['id'];
    }


    Безопаснее использовать для этого функцию get_query_var()

    if ( get_query_var( 'id' ) ) {
    	$id = get_query_var( 'id' );
    }


    Чтобы этот код сработал вам нужно зарегистрировать доступные параметры

    add_filter( 'query_vars', 'add_my_var' );
    function add_my_var( $public_query_vars ) {
    	$public_query_vars[] = 'id';
    	return $public_query_vars;
    }


    Все редиректы должны выполняться на хуке template_redirect с помощью функции wp_redirect() или wp_safe_redirect(). Разбираете ссылку, проверяете необходимые условия редиректа и собираете новую ссылку. Вот шаблон:

    add_action( 'template_redirect', 'custom_template_redirect' );
    function custom_template_redirect() {
    
    	if ( $condition ) {
    		wp_redirect( home_url( '/' ) );
    		exit();
    	}
    
    }
    Ответ написан
    Комментировать
  • Как сделать кастомную страницу авторизации в WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вопрос "что делать?" — это вопрос философский. По сути в вас есть два варианта:

    1. Вы можете вооружиться банкой кофе и документацией, переписать форму регистрации и авторизации, разобрать функции, найти фильтры как заменить ссылку и все, что вам встретится по пути и надеяться, что вы не наделали дыр в системе авторизации
    2. Не заниматься ерундой и оставить ссылку авторизации в покое, пока у вас нет несколько миллионов активной аудитории, ваш сайт не представляет никакого интереса для взломщиков. Поставьте сложный пароль. Поставьте защиту от брутфорса fail2ban и спите спокойно


    Тут функции, которые вам понадобиться для первого варианта. Можете начать с функции wp_login_form(), она выводит HTML-форму авторизации
    Ответ написан
    Комментировать
  • Как получить список всех менеджеров Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $args = array(
    	'role'   => 'administrator',
    );
    
    if ( $users = get_users( $args ) ) {
    	echo '<ul>';
    	foreach ( $users as $key => $user ) {
    		echo '<li><a href="' . get_author_posts_url( $user->ID ) . '">' . $user->display_name . '</a></li>';
    	}
    	echo '</ul>';
    }
    Ответ написан
    2 комментария
  • Как использовать таксономии?

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

    Тут иерархия шаблонов

    Для кастомного типа записей лучше регистрировать свои таксономии с помощью register_taxonomy()
    Ответ написан
    4 комментария
  • Как убрать копии картинок разных размеров в wordpress?

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

    • thumbnail — миниатюра (меняется из админки)
    • medium — средний размер (меняется из админки)
    • medium_large — умеренно большой (с WP 4.4.)
    • large — большой (меняется из админки)
    • 1536x1536 — 2x medium_large (c WP 5.3)
    • 2048x2048 — 2x large (c WP 5.3)


    Дополнительные размеры регистрируются с помощью функции add_image_size() в коде вашей темы или плагина

    Удалить ранее зарегистрированный размер изображения можно с помощью функции remove_image_size()

    Чтобы физически пересоздать новый набор размеров файлов используйте плагин Regenerate Thumbnails
    Ответ написан
    Комментировать
  • Как сделать ссылку на другую страницу в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Каждой записи при публикации присваивается свой уникальный идентификатор (ID), Чтобы получить ссылку на эту запись вам нужно передать этот ID в функцию get_permalink(), она вернет вам нужный url
    Ответ написан
  • Как отключить показ объявлений РСЯ для определенных страниц?

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

    if ( !is_page( 'contacts' ) ) {
    	# code...
    }
    Ответ написан
    Комментировать
  • Как заменить логотип Wordpress на определенной странице через function.php?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Что-то я не помню такого экшена 'custom_logo', зато есть фильтр 'get_custom_logo', код сработает при выводе логотипа с помощью функции the_custom_logo()

    add_filter( 'get_custom_logo', 'custom_logo_url' );
    function custom_logo_url( $html ) {
    
    	if ( is_home() && is_front_page() ) {
    		$dir = wp_get_upload_dir();
    		$html = '<img class="logo-main scale-with-grid" src="' . $dir['baseurl'] . '/2021/08/logo-black.png" data-retina="" data-height="93" alt="logo-black" data-no-retina="">';
    	}
    
    	return $html;
    
    }


    Используйте условные теги is_single(), is_page(), is_archive(), is_front_page() и подобные, чтобы выполнить код для определенного шаблона

    wp_get_upload_dir() получает массив вариаций путей до каталога загрузок

    Фильтр должен возвращать return, а не выводить echo
    Ответ написан
    1 комментарий
  • Можно ли создать полноценный интернет-магазин на wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Мастхэв WooCommerce, elementor не нужен

    По интеграции с 1C есть один старый плагин WooCommerce and 1C:Enterprise, он давно не обновлялся и вероятно потребует доработки
    Ответ написан
    2 комментария
  • Как сделать правильный robots.txt для новостного сайта?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Я бы убрал из этого списка все) Серьезно, просто не допускайте, чтобы у вас в тексе были ссылки на поисковые запросы, /cgi-bin/ сто лет не используется, в /wp-admin/ робот не зайдет, а страница авторизации закрыта тегом noindex, /xmlrpc.php это вообще недоступный файл с фронта, страниц авторов у вас нет, а если есть, зачем их закрывать, Openstat и UTM метки пусть индексирует, жалко что ли

    И если уж вы собрались писать правила для robots, то для этого есть хук robots_txt. Работает это так:

    // Добавляем правила для файла robots.txt
    add_filter( 'robots_txt', 'custom_robots_txt', 20, 2 );
    function custom_robots_txt( $output, $public ) {
    
    	$output .= "Disallow: /search/\n";
    	$output .= "Disallow: /author/\n";
    	$output .= "Disallow: /users/\n";
    	
    	return apply_filters( 'custom_robots_txt', $output, $public );
    }
    Ответ написан
  • Как сделать так, чтобы при adblock показывалась кнопка Войти на сайте?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    get_the_terms() получает термины, относящиеся к текущей записи. Если у вас отмечены "Бесплатно" и "Государственное", то функция вернет и их. В этой функции нет аргументов, позволяющих исключить термины из выборки на момент запроса в базу

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

    $cur_terms = get_the_terms( $postID->ID, 'wpsl_store_category' );
    $not_allowed = [ 'Бесплатно', 'Государственное' ];
    
    if( is_array( $cur_terms ) ) {
    	foreach( $cur_terms as $cur_term ) {
    		if ( !in_array( $cur_term->name, $not_allowed ) ) {
    			echo $cur_term->name;
    		}
    	}
    }
    Ответ написан
    4 комментария
  • Как разрешить авторам загружать файлы из фронтэнда в WP?

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

    add_action( 'admin_init', 'razreshit_uchasnikam_gruzit_faili' );
    function razreshit_uchasnikam_gruzit_faili() {
    	if ( !current_user_can( 'upload_files' ) ) :
    		$uchasnik = get_role( 'author' );
    		$uchasnik->add_cap( 'upload_files' );
    	endif;
    }
    Ответ написан
  • Как активировать ссылки для пагинации?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Зависит от того, где вы находитесь. Если это любая архивная страница (archive.php, category.php, home.php и т.д), то тут уже существует глобальный запрос и вызывать кастомный экземпляр wp_query() НЕ НУЖНО. Если нужно изменить запрос, то делать это нужно на хуке pre_get_posts

    Для этого, существующего запроса будут работать родные функции для пагинации the_posts_pagination() и the_posts_navigation(), я советую посмотреть любую популярную или стандартную тему twenty в качестве примера

    В редких случаях вне архивных страниц вам действительно может понадобиться заказать из базы записи и сделать для них пагинацию. Т.к. я уже многократно отвечал на этот вопрос, то написал статью с хорошим рабочим примером, рекомендую ознакомиться
    Ответ написан
    Комментировать
  • Как выводить посты с разными стилями и разметкой в wordpress?

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

    $i = 1;
    while( $loop->have_posts() ) {
    	$loop->the_post();
    
    	if ( $i == 1 ) {
    		# первый пост
    	} else {
    		# все остальные
    	}
    
    	$i++;
    }
    Ответ написан
    Комментировать
  • Как разделить на категории в вордпресс?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В чем сложность? Добавляете две рубрики, при публикации записи указываете к какой рубрике она относится. Внешний вид → Меню, чтобы добавить их в меню
    Ответ написан
  • Насколько критичен размер файла стилей (style.css и других)?

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

    Кстати, мне даже интересно, что вы там понаписали на 350 кбайт, это ведь реально очень много, наверное 10к+ строк
    Ответ написан