Профиль пользователя заблокирован сроком с 3 января 2023 г. и навсегда по причине: систематические нарушения правил сервиса
  • Функция вызывает сама себя?

    Adamos
    @Adamos
    Это называется - рекурсия. Выполняется та же самая функция, с самой первой строчки, только аргументом к ней будет внутренний массив. Так что она выведет те два числа - 32 и 12 через отбивку и закончит работу, вернувшись в вызвавшую функцию.
    Для человеческого понимания представьте, что на месте рекурсивного вывода на распечатку еще раз положили распечатку той же функции. И если надо - можно накладывать сверху еще сколько угодно листов с такими распечатками. А когда их текст заканчивается - снимать, возвращаясь на то же самое место, откуда был вызов.
    Ответ написан
    4 комментария
  • Как понять внутри цикла 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 комментарий
  • Как вывести все картинки из поста в определенное место?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Пагинация делается в связке - бэкенд высчитывает нужный кусок контента, исходя из длинны контента на страницу и номера страницы соответственно. Номер страницы передается в параметрах запроса (собственно ссылке из блока пагинации). Фронтенд - обычно хтмл блок, построенный с помощью цикла на языке бэкенда (например пхп), отображает в браузере соответствующие ссылки, исходя из общей длинны контента, и деля его на размер контента на одну страницу. Можно его построить и на яваскрипте, но данные для построения (текущая страница, всего страниц) передается с бэкенда, так как там хранится выбранная информация.

    В редких случаях используют "фиктивную" пагинацию на js, то есть весь контент загружают как список с бэкенда, а на фронте делят его на куски, и по нажатию показывают кусок соответствующий номеру страницы.
    Ответ написан
    5 комментариев