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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $classes[] = 'project-item col-lg-4 col-md-6 col-sm-12';
    
    $project_taxes = get_the_terms( $post->ID, 'project_tax' );
    if( is_array( $project_taxes ) ) {
    	foreach ( $project_taxes as $key => $project_tax ) {
    		$classes[] = $project_tax->slug;
    	}
    }
    
    echo '<div class="' . implode( ' ', $classes ) . '">';
    	echo '<h2>' . $post->post_title . '</h2>';
    echo '</div>';


    PS. Пожалуйста, формулируйте вопросы с кодом, а не со скриншотами. Перепечатывать ваш код с экрана никто не будет
    Ответ написан
    Комментировать
  • Как вставить верстку письма в wp_mail()?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    add_filter( 'wp_mail_content_type', function( $content_type ) {
    	return "text/html";
    });
    
    $headers = 'From: My Name <myname@mydomain.com>' . "\r\n";
    $html = '<p>The <em>HTML</em> message</p>';
    
    wp_mail( 'me@example.com', 'The subject', $html, $headers );
    Ответ написан
    2 комментария
  • Как создать на Wordpress страницу ответа на GET-запрос?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    PHP-код, встроенный в страницу будет разбирать строку GET-запроса от API сервиса бронирования и, на основании данных из запроса, формировать сообщение о результате бронирования.


    Это и есть ответ на ваш вопрос. Если условие верно — загружаем один шаблон, в противном случае другой

    if ( $condition ) {
    	get_template_part( 'templates/thankyou' );
    } else {
    	get_template_part( 'templates/common' );
    }
    Ответ написан
    1 комментарий
  • Как вставить рекламный блок под заголовок?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Еще один вариант — вставить нужный код на фильтре the_content

    add_filter( 'the_content', 'custom_content' );
    function custom_content( $text ) {
    
    	$ads = '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1452282254312739" crossorigin="anonymous"></script>';
    	
    	return $ads . $text;
    
    }


    Весь контент вашей страницы находится в переменной $text, строку $ads можно вставить до или после него. Так же регулярками или DOM-парсером вы можете вставлять рекламу в середину контента

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

    if ( get_post_type() === 'post' ) {
    	return $ads . $text;
    } else {
    	return $text . $ads;
    }
    Ответ написан
    Комментировать
  • Есть ли хорошие плагины для создания справочника?

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

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

    https://stackoverflow.com/questions/22335470/wordp...
    Ответ написан
    3 комментария