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

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( $this_tag->name === 'Классицизм' ) {
    	echo '<a href="' . get_term_link( $this_tag->term_id, $this_tag->taxonomy ) . '">' . $this_tag->name . '</a>';
    }
    Ответ написан
    Комментировать
  • WordPress MU (Wordpress multisite) - так ли всё это удобно на практике?

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

    Работает стандартный экспорт, работают некоторые плагины миграции

    насколько сложно мигрировать с поддомена на отдельный домен оставаясь в системе WordPress MU?

    Просто при создании сайта, сложнее потом — нужно лезть в базу менять ссылки

    насколько трудоемким будет процесс клонирования заранее заготовленных шаблонных сайтов?

    Готовых решений не видел, писал свое

    можно ли устанавливать плагины централизованно, сразу для всех сайтов?

    Можно

    можно ли устанавливать темы централизованно, сразу для всех сайтов?

    Если оставить одну доступную тему, скорее всего она будет применяться по умолчанию

    как лучше всего создавать "точки восстановления" состояния сайтов?

    Если речь о бекапах, то общую базу бекапить так же как и для обычных сайтов на WordPress, для одного сайта в системе мультисайтов можно поискать плагины, но их может не быть
    Ответ написан
    1 комментарий
  • Как удалить hook wordpress?

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

    remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
    remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
    Ответ написан
    Комментировать
  • Создание таблиц в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Программы для создания таблиц: excel и google sheets. Для WordPress есть неплохой плагин TablePress, но на больших объемах информации все таки удобнее работать в классических таблицах и программно загружать их на сайт
    Ответ написан
    Комментировать
  • Почему не работает пагинация wordpress?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Из вашего текста не понятно в какой момент может быть вызвана функция getField_Address(), если это возможно на хуке wp_enqueue_scripts, то вы можете подключить ваш код с помощью wp_add_inline_script()

    add_action( 'wp_enqueue_scripts', function(){
    
    	wp_enqueue_script( 'my_scripts', get_stylesheet_directory_uri() .'/my_scripts.js' );
    
    	$html_res = getField_Address($datafield_address);
    
    	// добавим произвольный код
    	wp_add_inline_script( 'my_scripts', $html_res[1] );
    	
    } );


    Если возможности нет, то можете просто повесить скрипт на какой-то последний приоритет хука wp_footer
    Ответ написан
    Комментировать
  • Прикрепить изображения к записи WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Если вы загружаете медиафайлы с использованием функции wp_insert_attachment(), то можете передать ID поста, к которому нужно прикрепить запись третьим параметром $parent_post_id

    wp_insert_attachment( $attachment, $filename, $parent_post_id, $wp_error, $fire_after_hooks );


    Проще всего прикрепить изображение к посту с помощью set_post_thumbnail(), первым параметром передаете ID записи, вторым ID медиафайла

    set_post_thumbnail( $post, $thumbnail_id );
    Ответ написан
    Комментировать
  • Как отобразить фотографии на странице из внутренней папки вместо медиабиблиотеки wp?

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

    $directory_uri = get_stylesheet_directory_uri() . '/data/nft/';
    $directory = get_stylesheet_directory() . '/data/nft/';
    
    echo '<div class="masonry-container">';
    	echo '<div class="row no-gutters masonry-gallery popup-gallery">';
    
    		foreach ( scandir( $directory ) as $key => $file_name ) {
    			if ( ! in_array( $file_name, ['.', '..'] ) && file_exists( $directory . $file_name ) ) {
    				echo '<a href="' . $directory_uri . $file_name . '" class="col-12 col-sm-6 col-lg-4 col-xl-3 masonry-item" title="#">';
    					echo '<img src="' . $directory_uri . $file_name . '" class="masonry-image" alt="#"/>';
    				echo '</a>';
    			}
    		}
    
    	echo '</div>';
    echo '</div>';
    Ответ написан
    Комментировать
  • Где найти код header-а темы Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Функция onepress_header() находится в файле /inc/template-tags.php
    Ответ написан
    Комментировать
  • Как в wordpress скрыть элемент на странице для определенной группы пользователей?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Например, можно проверять текущий ник пользователя, если он авторизован
    if ( is_user_logged_in() ) {
    	$current_user = wp_get_current_user();
    
    	if ( in_array( $current_user->nickname, 'anubis', 'bast', 'ra', 'osiris' ) ) {
    		# code...
    	}
    
    }


    Если нужно проверять роль текущего пользователя, можно использовать этот пример

    function user_has_role( $user_id, $role_name ) {
    	$user_meta = get_userdata( $user_id );
    	$user_roles = $user_meta->roles;
    	return in_array( $role_name, $user_roles );
    }
    
    if ( is_user_logged_in() && user_has_role( get_current_user_id(), 'student' ) ) {
    	# code...
    }
    Ответ написан
  • Странное содержание robots в вордпрессе, такое нормально?

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

    // Добавляем правила для файла robots.txt
    add_filter( 'robots_txt', 'wpgen_robots_txt', 20, 2 );
    function wpgen_robots_txt( $output, $public ) {
    
    	$output .= "Disallow: /wp-json\n";
    
    	return apply_filters( 'wpgen_robots_txt', $output, $public );
    }
    Ответ написан
    Комментировать
  • Как в wordpress вывести блок только в 1м посте(именно в посте)?

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

    if ( is_single() && get_the_ID() === 12 ) {
    	// code...
    }


    В цикле можно сделать проверку по номеру счетчика

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

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

    if ( is_single() && in_array( get_the_ID(), [12, 13, 14] ) ) {
    	# code...
    }


    Для проверки по слагу записи так

    if ( is_single() && in_array( get_post_field( 'post_name' ), ['bmw', 'audi', 'nissan'] ) ) {
    	# code...
    }
    Ответ написан
    Комментировать
  • Как получить модерацию первого комментария?

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $cats = array();
    
    foreach ( get_the_category() as $category ) {
    	$cats[] = $category->name;
    }
    
    if ( !empty( $cats ) && in_array( 'Соборы', $cats ) ) {
    	# выводим нужный блок
    }
    Ответ написан
    Комментировать
  • Как отфильтровать записи Wordpress внутри рубрики/метки по дате?

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

    Если у вас дата заполнена в полях ACF и вы хотите сделать запрос из базы исходя из этого параметра, то для этого используется параметр meta_key запроса wp_query()

    $posts = get_posts( array(
        'post_type' => 'event',
        'meta_key'  => 'date',
        'orderby'   => 'meta_value_num',
        'order'     => 'ASC',
    ));


    Если вы находитесь в шаблоне archive.php или подобном, то вам надо провести фильтрацию глобального запроса на хуке pre_get_posts

    add_action( 'pre_get_posts', 'pre_get_events', 1 );
    function pre_get_events( $query ) {
    	if ( $query->is_post_type_archive( 'event' ) ) {
    		$query->set( 'meta_key', 'date' );
    		$query->set( 'orderby', 'meta_value_num' );
    	}
    }


    Если же вам нужно сделать кастомную сортировку по двум и более параметрам, например, с помощью фронтенд формы, то без гет-параметров не обойтись. Возможны любые варианты:

    • мойсайт.ру/2022/05/10/?tag=arbuz
    • мойсайт.ру/tag/arbuz/?date=2022-05-10


    С помощью get_query_var() проверяете наличие переменной и меняете основной запрос

    add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
    function custom_pre_get_posts( $query ) {
    	if ( $tag = get_query_var( 'tag', false ) ) {
    		$query->set( 'tag', $tag );
    	}
    }


    Если вы переживаете, что дублируются заголовки, то можете тем же самым способом с помощью get_query_var() проверять наличие переменной и подменять заголовок с описанием
    Ответ написан
    3 комментария
  • Условие для кастомной рубрики wp?

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

    1. Создать шаблон страницы руководствуясь иерархией шаблонов:

    • taxonomy-{taxonomy}.php
    • taxonomy-{taxonomy}-{term}.php


    2. Использовать проверку is_tax()

    // проверяем, что находимся в терминах audi и bmw таксономии product-category
    is_tax ( 'product-category', array( 'audi', 'bmw' ) ) {
    	
    }
    Ответ написан
    Комментировать
  • Как связать 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 комментария