Ответы пользователя по тегу WordPress
  • Как скрывать разные языки 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;
    }
    Ответ написан
  • Как вывести статьи рубрики Wordpress?

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

    Кроме того, проверки is_tag() и is_category() так же нужны, т.к. шаблоны tag.php и category.php уже загружаются по этим условиям

    Попробуйте посмотреть как делаются популярные или стандартные темы twenty и делать подобным образом. Например, вы можете взять шаблон archive.php темы Twenty Sixteen и переделать верстку под себя, станет значительно лучше

    <?php get_header(); ?>
    
    	<div id="primary" class="content-area">
    		<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();
    
    				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 -->
    	</div><!-- .content-area -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Ответ написан
    Комментировать
  • Как в шорт код вставить переменную?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $cat = get_field( 'cat_product' );
    
    if ( $cat ) {
    	echo do_shortcode( '[products category="' . $cat . '" ]' );
    }
    Ответ написан
    Комментировать
  • Как в WordPress получить ID поста в сайдбаре?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    if ( is_single() ) {
    	$post_id = get_the_ID();
    	$event_data = get_post_meta( $post_id, '_event_data', 'true' );
    }
    Ответ написан
  • Вывод постов одной категории get_posts?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $queried_object = get_queried_object();
    
    if ( is_tax( 'projects' ) && isset( $queried_object->term_id ) ) {
    
    	$query = new WP_Query( [
    		'post_type' => 'portfolio',
    		'posts_per_page' => 10,
    		'tax_query' => [
    			[
    				'taxonomy' => 'projects',
    				'field'    => 'id',
    				'terms'    => $queried_object->term_id,
    			],
    		]
    	] );
    
    }
    Ответ написан
    Комментировать
  • Как на сайте устанавливать водяной знак по диагонали?

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