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

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

    $current = absint( max( 1, get_query_var( 'paged' ) ? get_query_var( 'paged' ) : get_query_var( 'page' ) ) );
    
    $args = [
    	'post_type' => 'news',
    	'posts_per_page' => $posts_per_page,
    	'paged' => $current,
    ];


    Номер текущей страницы пагинации и максимальное кол-во страниц запроса нужно передать еще и в функцию paginate_links()

    echo wp_kses_post(
    	paginate_links(
    		[
    			'total'   => $loop->max_num_pages, // количество берем из дефолтной опции запроса
    			'current' => $current, // текущая страница
    		]
    	)
    );


    Остальные параметры paginate_links() можете удалить, вызывать global $wp_query не нужно

    Ссылку в ссылку класть нельзя, у вас поломается html

    Выводить пагинацию нужно ПОСЛЕ цикла while

    while ( $loop->have_posts() ) {
    	# code...
    }
    
    echo wp_kses_post( paginate_links() );


    Еще раз и подробнее тут
    Ответ написан
    4 комментария
  • Почему не открывается основная страница?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Проверьте еще раз наличие перенаправлений на public_html в БД и в .htaccess, если проблем не найдете, то пишите в саппорт хостинга. Скорее всего папка public_html все таки корневая для вашего домена и именно в нее нужно было положить все файлы WP
    Ответ написан
  • Как убрать padding отступы на странице Wordpress?

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

    620d99ca55255618226647.png
    Ответ написан
    Комментировать
  • Страница всех заявок / мои заявки - как сделать?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть плагин Flamingo для сохранения писем из CF7 в БД

    Какие данные сохраняются и есть ли среди них id пользователя создавшего письмо я не знаю, но думаю у плагина должны быть хуки и фильтры и покопавшись в документации или исходниках кода можно найти эту информацию
    Ответ написан
    Комментировать
  • Существует ли плагин в WordPress фиксирующий рефералов за партнером при заполнении контактных данных?

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

    Добавляете в массив query_vars свою переменную

    add_filter( 'query_vars', 'add_query_vars' );
    function add_query_vars( $qvars ) {
    	$qvars[] = 'partner';
    	return $qvars;
    }


    Теперь для любой ссылки вида example.ru/?partner=15 вы сможете получить номер партнера с помощью get_query_var()

    if ( $query_var = get_query_var( 'partner' ) ) {
    	# code...
    }


    Положите его в localstorage или cookie, а при создании заявки проверяйте существование и записывайте в таблицу. В качестве номера партнера можно использовать id пользователя или произвольный номер, предварительно положив его в user_meta

    Собрать партнерскую ссылку можно с помощью функции add_query_arg()

    $url = add_query_arg( ['partner' => $user_id], home_url( '/' ) );
    Ответ написан
    1 комментарий
  • Как скрывать разные языки polylang если страница не переведена?

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

    if ( empty( get_the_content() ) ) {
    	# code...
    }
    Ответ написан
    Комментировать
  • Почему при переподключении jquery может отвалиться myajax?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Из описания функции wp_localize_script();

    620c41ea23b77784011981.png
    Ответ написан
    1 комментарий
  • Как отображать на главной в Wordpress только прилепленные записи, а остальные смещать?

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

    620c4116f2746263881109.png

    Если у вас это поведение изменено, ищите проблему в коде вашей темы. Начать поиск рекомендую с хука pre_get_posts, где можно изменить параметры глобального запроса аргументом ignore_sticky_posts
    Ответ написан
  • Как переподключить jquery и не поломать сайт?

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

    function wpz_scripts() {
    
    	wp_enqueue_script( 'ajax-events', get_theme_file_uri( 'dist/build/ajax-events.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/dist/build/ajax-events.min.js' ) ) );
    
    	wp_localize_script(
    		'ajax-events', 
    		'ajax_events_obj', 
    		array(
    			'url' => admin_url( 'admin-ajax.php' ),
    			'nonce' => wp_create_nonce( 'nonce-events' ) // Создаем nonce
    		) 
    	);
    
    }
    add_action( 'wp_enqueue_scripts', 'wpz_scripts' );


    Зачем вы вообще пытаетесь подключить свою версию jq? В WP 5.9 и так подключается минифицированная версия jQuery v3.6.0
    Ответ написан
  • Как понять, какой язык используется на сайте?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте использовать функцию qtrans_getLanguage()

    $currentLang = qtrans_getLanguage();
    Ответ написан
  • Как кастомизировать пагинацию WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    В функции paginate_links() есть фильтр paginate_links_output, можете попробовать распарсить регулярками итоговый html

    Или откройте функцию paginate_links(), посмотрите и скопируйте нужные запросы в свою функцию, а вывод верстки измените на свой

    В вашей функции вообще ссылок нет, хотя задача paginate_links() именно в том и заключается чтобы получить и вывести ссылки. Уж не знаю, что по вашему должно происходить по кликам на кнопки и как WP должен понять какая ссылка следующая, а какая предыдущая, но вы хотя бы в дата-атрибуты их положите
    Ответ написан
    Комментировать
  • Кто и как подключает скрипты и стили на своем wordpress?

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

    Хочу отметить функцию get_theme_file_uri(), которую редко используют из-за кучи старых гайдов. Она ищет файл сначала в дочерней теме, если его там нет, то берет его из основной

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

    Т.к. я часто меняю что-то программно, то и id у меня могут измениться, а вот за слагами я слежу для SEO, поэтому во всех проверках типа is_page() проверяю слаги постов. Но это уже вкусовщина

    function custom_scripts_init() {
    
    	// общие стили
    	wp_enqueue_style( 'common-styles', get_theme_file_uri( 'assets/css/common.min.css' ) , array(), filemtime( get_theme_file_path( '/assets/css/common.min.css' ) ) );
    
    	// общие скрипты 
    	wp_enqueue_script( 'common-scripts', get_theme_file_uri( 'assets/js/common.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/common.min.js' ) ), true );
    
    	// скрипты для страницы постов
    	if ( is_home() ) {
    		wp_enqueue_script( 'home-scripts', get_theme_file_uri( 'assets/js/home.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/home.min.js' ) ), true );
    	}
    
    	// скрипты для массива страниц
    	if ( is_page( ['sample-page', 'contacts'] ) ) {
    		wp_enqueue_script( 'page-scripts', get_theme_file_uri( 'assets/js/page.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/page.min.js' ) ), true );
    	}
    
    }
    add_action( 'wp_enqueue_scripts', 'custom_scripts_init' );
    Ответ написан
    3 комментария
  • Как подключить модуль js в wordpress?

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

    add_action( 'wp_enqueue_scripts', 'mainfeedscripts' );
    function mainfeedscripts() {
    	wp_enqueue_script( 'pawsScript', get_template_directory_uri() . '/assets/js/pawsScript.js', array(), '2', true );
    
    	$pawsScriptInit = '
    		import {THE_ANIMATION_PAWS_MODULE} from ' . get_template_directory_uri() . '/assets/js/pawsScript.js
    		let Number_paws = 10 
    		let Animation_Speed = 20 
    		let Height_Animation = 2000 
    		let mobile = "False" 
    		let stateBodyHeight = "True" 
    		THE_ANIMATION_PAWS_MODULE(Number_paws, Animation_Speed, Height_Animation, mobile, stateBodyHeight)
    	';
    
    	wp_add_inline_script( 'pawsScript', $pawsScriptInit );
    }
    Ответ написан
    1 комментарий
  • Как вытянуть фон из thumbnail?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $background_image = get_the_post_thumbnail_url( get_the_ID(), 'full' );
    echo '<section class="hero" style="background: url(' . $background_image . ') center no-repeat">';
    Ответ написан
    1 комментарий
  • [Woo] Как отсортировать товары по наличию фото?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте это решение

    $args = array( 
    	'post_type' => 'product', 
    	'posts_per_page' => 99,
    	'order' => 'DESC', // Display all post with thumbnail ID first 
    	'orderby' => 'meta_value_num', // order by meta key value
    	'meta_query' => array(  //query post based on meta key
    		array(
    			'relation' => 'OR', // add condition if meta key is exists or not
    			array(
    				'key' => '_thumbnail_id', 
    				'compare' => 'NOT EXISTS' // include post without _thumbnail_id key
    			),
    			array(
    				'key' => '_thumbnail_id', 
    				'compare' => '!NOT EXISTS' // include post with _thumbnail_id key
    			)
    		)
    	)
    );


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

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

    $categories = get_terms();
    foreach ( $categories as $key => $category ) {
    	if ( $category->parent == 0 ) {
    		# нет родителя
    	} else {
    		# есть родитель
    	}
    }


    При желании можно обернуть это все в отдельную функцию

    function is_category_parent( $cat_id ) {
    	$category = get_category( $cat_id );
    	if ( $category->parent == 0 ) {
    		return true;
    	}
    	return false;
    }


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

    if ( is_category_parent( $cat_id ) ) {
    	// категория имеет родителя
    }
    Ответ написан
    Комментировать
  • Где почитать про то, как формировать меню?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Называется Walker_Nav_Menu()

    Но если у вас полностью своя верстка, то проще получить массив пунктов меню с помощью wp_get_nav_menu_items() и собрать простым циклом

    $menu_name = 'custom_menu_slug';
    $locations = get_nav_menu_locations();
    
    // получаем элементы меню
    $menu_items = wp_get_nav_menu_items( $locations[ $menu_name ] );
    
    // создаем список
    echo '<ul id="menu-' . $menu_name . '">';
    
    foreach ( (array) $menu_items as $key => $menu_item ){
    	echo '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
    }
    
    echo '</ul>';
    Ответ написан
    Комментировать
  • Есть ли визуальный редактор для Wordpress для редактирования собственного костомного html?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Гутенберг активно движется в этом направлении, посмотрите блочный редактор в новой теме twenty twenty two
    Ответ написан
    Комментировать
  • Как в готовое мобильное меню шаблона добавить текст "Меню"?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    <button type="button" class="menu-toggle"><?php _e( 'Menu', 'textdomain' ); ?></button>
    Ответ написан
    Комментировать
  • Как правильно использовать цикл for внутри foreach?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    foreach ( $hiw_step_slider as $key => $elem ) {
    	echo $key+1;
    }


    или

    $i = 0;
    foreach ( $hiw_step_slider as $elem ) {
    	echo ++$i;
    }
    Ответ написан