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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Можно сделать редирект на главную на хуке template_redirect

    add_action( 'template_redirect', 'unregistered_user_redirect' );
    function unregistered_user_redirect() {
    
    	if ( !is_home() && !is_front_page() && !is_user_logged_in() ) {
    		wp_redirect( home_url(), 301 );
    	}
    
    }
    Ответ написан
    Комментировать
  • Как разобрать такую строку {i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}?

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

    var_dump( get_option( 'rewrite_rules', false ) );
    var_dump( get_option( 'widget_categories', false ) );
    var_dump( get_option( 'wp_user_roles', false ) );
    var_dump( get_option( 'cron', false ) );
    var_dump( get_post_meta( get_the_ID(), '_schema_json', true ) );
    Ответ написан
    2 комментария
  • WP не работате скрипт от вcтроенного jquery?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    6247119aba988799088886.png

    Причина в этом, зачем вы вообще подключаете свой jquery, если он и так подключается версией 3.6.0 по умолчанию?
    Ответ написан
  • Как понять внутри цикла WordPress и снаружи цикла?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    while ( have_posts() ) — это цикл перебора постов из глобального запроса
    the_post() — функция устанавливает переменную $post для работы функций the_title(), the_content() и подобные

    Если цикл образуется с помощью экземпляра WP_Query(), то и переменные устанавливаются из этого же запроса ( $query->have_posts(), $query->the_post() )

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


    get_posts() — это обертка для класса WP_Query с несколькими предустановленными параметрами. Установка переменной $post делается с помощью функции setup_postdata() и в целом тот же цикл выглядит немного по другому

    // Задаем нужные нам критерии выборки данных из БД
    $args = array(
    	'posts_per_page' => 5,
    	'orderby' => 'comment_count'
    );
    
    
    $my_posts = get_posts( $args );
    
    // Цикл
    if ( $my_posts ) {
    	foreach ( $my_posts as $key => $post ) {
    		setup_postdata( $post );
    
    		the_title(); // Заголовок
    		the_content(); // Контент
    	}
    } else {
    	// Постов не найдено
    }
    
    // Возвращаем оригинальные данные поста. Сбрасываем $post
    wp_reset_postdata();


    Еще раз хочу акцентировать внимание на том, что установка переменной $post нужна для работы функций the_title(), the_content(), get_template_part() и т.д., вместо их использования вы можете доставать данные напрямую из объекта. Например, такая конструкция тоже будет работать

    $args = array(
    	'posts_per_page' => 5,
    	'orderby' => 'comment_count'
    );
    
    $my_posts = get_posts( $args );
    
    foreach ( $my_posts as $key => $post ) {
    
    	echo $post->post_title; // Заголовок
    	echo  $post->post_content; // Контент
    
    }
    Ответ написан
    1 комментарий
  • Вывод записей по фильтру 2х таксономий?

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

    $args = [
    	'post_type' => 'info',
    	'posts_per_page' => 24,
    	'tax_query' => [
    		'relation' => 'AND',
    		[
    			'taxonomy' => 'city',
    			'field' => 'name',
    			'terms' => [ 'Рязань' ]
    		],
    		[
    			'taxonomy' => 'categ',
    			'field' => 'name',
    			'terms' => [ 'МВД' ]
    		]
    	]
    ];
    
    $query = new WP_Query( $args );
    
    // Цикл.
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    		
    		the_title(); // выводим заголовок
    
    	}
    } else {
    	// Постов не найдено
    }
    
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    Ответ написан
    3 комментария
  • Как в functions.php подключать php файлы(WordPress)?

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

    require_once get_template_directory() . '/inc/simple_html_dom.php';
    Ответ написан
    Комментировать
  • Как вывести все картинки из поста в определенное место?

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

    Отвечая на ваш вопрос, содержание контента можно получить с помощью функции get_the_content(). Универсальных методов решения вашей задачи НЕТ. Вы можете разобрать строку регулярками или использовать какой-нибудь DOM-парсер, например Simple HTML DOM Parser

    После этих операций, если вам понадобится убрать какой-либо контент до вывода на экран, вы можете использовать фильтр the_content

    add_filter( 'the_content', 'filter_function_name_11' );
    function filter_function_name_11( $content ) {
    	// Фильтр...
    
    	return $content;
    }
    Ответ написан
    3 комментария
  • Вывести таксономии текущей страницы?

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

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

    $terms = get_the_terms( $post->ID, 'city' );
    if( is_array( $terms ) ) {
    	foreach ( $terms as $key => $term ) {
    		echo '<a href="' . get_term_link( $term->term_id, $term->taxonomy ) . '">' . $term->name . '</a>,';
    	}
    }
    Ответ написан
  • Должен ли отступ между абзацами br проставляться автоматически из гутенберга?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Фильтр wpautop заменяет двойной перенос строки на HTML конструкцию <p>...</p>, а одинарный на <br>

    По умолчанию функция применяется к следующим фильтрам:

    add_filter( 'term_description', 'wpautop' );
    add_filter( 'get_the_post_type_description', 'wpautop' );
    add_filter( 'the_content', 'wpautop' );
    add_filter( 'the_excerpt', 'wpautop' );
    add_filter( 'comment_text', 'wpautop', 30 );
    add_filter( 'widget_text_content', 'wpautop' );
    add_filter( 'the_excerpt_embed', 'wpautop' );


    Отключить фильтр можно так:

    remove_filter( 'the_content', 'wpautop' );
    remove_filter( 'the_excerpt', 'wpautop' );
    Ответ написан
    Комментировать
  • Почему не изменяются мета теги в Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Потому что поисковый робот еще не посетил вашу измененную страницу и не учел эти изменения в своей базе. Рекомендую добавить sitemap в вебмастер и google search console, так поисковики будут быстрее узнавать об изменениях на вашем сайте
    Ответ написан
    Комментировать
  • Отображение всех категорий на одной странице?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Шаблон для вывода постов это category.php или archive.php, а не blocks.php. Используйте для их код из любой темы twenty или кастомизируйте его

    <?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>
    
    			<?php while ( have_posts() ) :
    				the_post();
    
    				get_template_part( 'template-parts/content', get_post_format() );
    
    			endwhile;
    
    			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>',
    				)
    			);
    
    		else :
    
    			get_template_part( 'template-parts/content', 'none' );
    
    		endif; ?>
    
    		</main>
    	</div>
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>


    Ссылку на страницу категории с записями можно получить с помощью get_category_link() по переданному $category_id. На будущее вам пригодится иерархия шаблонов WordPress
    Ответ написан
  • Помоги по WP, не вижу выбор шаблона для записи?

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

    /*
    Template Name: Мой шаблон страницы
    Template Post Type: post, page, product
    */
    Ответ написан
    2 комментария
  • Возможно ли дописывать свой backend в wordpress?

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

    Ищите через документацию или исходники нужное место в коде, используете функции add_filter() и add_action()

    В некоторых случаях, например при использовании WooCommerce или дочерних тем будет работать переопределение шаблонов путем копирования их в тему. Т.е. WordPress сначала будет искать нужный ему шаблон в вашей теме, а если не найдет, то будет использовать тот, который у него есть по умолчанию
    Ответ написан
    Комментировать
  • Как вывести изображение в шаблоне WordPress?

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

    <?php $acf_slid = get_sub_field( 'acf_slid' ); ?>
    <?php if ( $acf_slid ) { ?>
    <a href="<?php echo $acf_slid['url']; ?>"><img src="<?php echo $acf_slid['url']; ?>" alt="<?php echo $acf_slid['alt']; ?>" /></a>
    <?php } ?>
    Ответ написан
  • Как правильно задать title для каждого изображения в магазине, чтобы он был точно такой же, как alt?

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

    $size = 'post-thumbnail';
    
    $attr = array(
    	'class' => 'attachment-' . $size,
    	'alt'   => the_title_attribute(),
    );
    
    the_post_thumbnail( $size, $attr );


    В вашем решении в функцию .attr() нужно передавать переменную, а не строку

    jQuery( 'img' ).attr( 'title', image_alt );
    Ответ написан
    Комментировать
  • Разное оформление single.php(WordPress)?

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

    <?php get_header(); ?>
    
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main">
    
    		<?php while ( have_posts() ) :
    			the_post();
    
    			get_template_part( 'content', get_post_format() );
    
    			if ( comments_open() || get_comments_number() ) :
    				comments_template();
    			endif;
    
    			the_post_navigation(
    				array(
    					'next_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Next', 'twentyfifteen' ) . '</span> ' .
    						'<span class="screen-reader-text">' . __( 'Next post:', 'twentyfifteen' ) . '</span> ' .
    						'<span class="post-title">%title</span>',
    					'prev_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Previous', 'twentyfifteen' ) . '</span> ' .
    						'<span class="screen-reader-text">' . __( 'Previous post:', 'twentyfifteen' ) . '</span> ' .
    						'<span class="post-title">%title</span>',
    				)
    			);
    
    		endwhile; ?>
    
    		</main>
    	</div>
    
    <?php get_footer(); ?>


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

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

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Api вашей футбольной статистики у меня нет, но я приведу три рабочих примера использования разных api БЕЗ использования WP REST API

    YouTube Api

    $args = [
    	'part' => 'snippet', // какие параметры включить в ответ
    	'q' => 'WordPress', // поисковый запрос
    	'maxResults' => 50, // кол-во результатов в ответе
    	'key' => 'xxx', // ключ
    ];
    
    $api_url = add_query_arg( $args, 'https://www.googleapis.com/youtube/v3/search' ); 
    
    $json_result = wp_remote_get( $api_url );
    
    $body = json_decode( $json_result['body'] );
    var_dump( $body );


    Openweathermap Api

    $args = [
    	'lat' => '43.671387', // широта
    	'lon' => '40.297416', // долгота
    	'appid' => 'xxx', // // ключ
    	'lang' => 'ru', // язык
    ];
    
    $api_url = add_query_arg( $args, 'https://api.openweathermap.org/data/2.5/weather' );
    
    $json_result = wp_remote_get( $api_url );
    
    $body = json_decode( $json_result['body'] );
    var_dump( $body );


    Kinopoiskapiunofficial Api

    $person_id = '967312'; // id персоны
    $api_url = 'https://kinopoiskapiunofficial.tech/api/v1/staff/' . $person_id;
    
    $args = array(
    	'headers' => array(
    		'X-API-KEY' => 'xxx', // ключ
    		'Content-Type' => 'application/json',
    	),
    );
    
    $json_result = wp_remote_get( $api_url, $args );
    
    $body = json_decode( $json_result['body'] );
    var_dump( $body );


    В последнем случае ключ передается не в строке поиска, а в заголовках headers, судя по скриншотам это ваш случай
    Ответ написан
    2 комментария
  • Как использовать Шорткоды в произвольных полях Wordpres?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    add_filter( 'get_post_metadata', 'filter_function_name_1040', 10, 5 );
    function filter_function_name_1040( $value, $object_id, $meta_key, $single, $meta_type ){
    	// filter...
    
    	return $value;
    }
    Ответ написан
  • Какой плагин скачать для оптимизации сайта?

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

    Ответ написан
    1 комментарий
  • Как получить id выбранной категории в ACF Taxonomy?

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