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

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

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

    jQuery(document).ready(function ($) {
    
    	$('a.tab').on('click', function (e) {
    
    		$.ajax({
    			type: 'POST',
    			url: wpz_ajax_obj.ajaxurl, // Путь к файлу admin-ajax.php
    			data: {
    				'action': 'wpz_ajax_request', // Событие к которому будем обращаться
    				'post_type': $(e.currentTarget).attr('data-type'), // Передаём тип записи
    				'security': wplb_ajax_obj.nonce, // Используем nonce для защиты
    			}
    		})
    
    		e.preventDefault();
    
    	});
    });


    В php используете указанный параметр для запроса постов и возвращаете их функцией wp_send_json_success()

    function wpz_ajax_request() {
    
    	if ( isset( $_POST ) ) {
    
    		// Проверяем nonce, а в случае если что-то пошло не так, то прерываем выполнение функции
    		if ( !wp_verify_nonce( $_POST['security'], 'wpz-nonce' ) ) {
    			wp_die( 'Базовая защита не пройдена' );
    		}
    
    		// заказываем посты из базы
    		if ( isset( $_POST['post_type'] ) ) {
    
    			$args = array(
    				'post_type' => sanitize_text_field( $_POST['post_type'] ),
    				'posts_per_page' => 1,
    			);
    
    			$post_query = new WP_Query( $args );
    
    			if ( $post_query ) {
    				# если записи есть, возвращаем в wp_send_json_success() html-постов
    			} else {
    				# если записей нет, возвращаем в wp_send_json_success() информацию о том, что их нет
    			}
    
    		} else {
    			wp_send_json_error();
    		}
    
    	} // end if isset( $_POST )
    
    	wp_die();
    }


    PS. Желательно заранее проверять, что еще есть посты для загрузки, в противном случае скрывать кнопку их загрузки
    Ответ написан
  • Как создать динамический шаблон сразу для нескольких страниц?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Вы можете создать новый тип записи с помощью register_post_type() или Custom Post Type UI

    Для разных типов записи работают правила построения шаблонов:

    61e27e6c0fdda643902988.png

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

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

    https://www.elegantthemes.com/blog/wordpress/wordp...

    Для вашей задачи 100% решение вы вряд ли найдете, код писать все равно придется

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

    14:00 — 21:00; 11:00 — 21:00; 11:00 — 21:00; 11:00 — 21:00; 11:00 — 22:00; 09:00 — 22:00; 09:00 — 21:00


    mon="14:00 — 21:00" tue="11:00 — 21:00" wed="11:00 — 21:00" thu="11:00 — 21:00" fri="11:00 — 22:00" sat="09:00 — 22:00" sun="09:00 — 21:00"
    Ответ написан
  • Как массово обернуть ссылки в шорткод?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Могу посоветовать вам использовать любую библиотеку для парсинга html-тегов. Например, PHP Simple HTML DOM Parser

    Вот самый простой способ получить все ссылки

    $html = str_get_html( get_the_content() );
    
    $links = $html->find( 'a' );
    foreach ( $links as $key => $link ) {
    	var_dump( $link->href );
    }
    
    unset( $html );


    Обернуть в шорткоды можно с помощью метода

    $link->outertext = '[link]' . $link->outertext . '[/link]';


    Сохранить получившийся контент нужно с помощью wp_update_post()

    В целом, возможно есть и более простые решения, возможно вам удастся нагуглить даже плагины под вашу задачу или хотя бы похожие. Например, better search replace умеет менять все ссылки на сайте, а no external links преобразует все внешние ссылки во внутренние
    Ответ написан
    Комментировать
  • Условия по url для шаблона wp?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Есть условные теги is_single(), is_singular(), is_page() —используйте их для проверки где находитесь. Можно передавать id, slug, title и даже массив
    Ответ написан
    Комментировать