Поддержка Темы и шаблоны $GLOBALS в functions.php. Как передать?

  • Здравствуйте. Для удобства натягивания верстки хочу сделать такой шорткод:

    [posty]
    	<a href="[ssylka_posta]"><h2>[zagolovok_posta]</h2></a>
    	<img src="[kartinka_posta]" alt="[zagolovok_posta]" title="[zagolovok_posta]" />
    	<div class="tekst-kursivom">[anons_posta]</div>
    	<div class="obychnyj-tekst">[polnyj_tekst]</div>
    [/posty]

    То есть чтоб посты выводились без своих стилей и верстки

    В functions.php имеется такой код:

    <?php
    function posty($atts, $content) {
    
    	$args = array(
    		'posts_per_page'   => 5,
    		'offset'           => 0,
    		'category'         => '',
    		'category_name'    => '',
    		'orderby'          => 'date',
    		'order'            => 'DESC',
    		'include'          => '',
    		'exclude'          => '',
    		'meta_key'         => '',
    		'meta_value'       => '',
    		'post_type'        => 'post',
    		'post_mime_type'   => '',
    		'post_parent'      => '',
    		'author'	   => '',
    		'post_status'      => 'publish',
    		'suppress_filters' => true
    		);
    
    	$posts_array = get_posts(shortcode_atts($args, $atts));
    
    	$output='';
    	foreach ($posts_array as $post_object) {
    		//global $post;
       		//$post = $post_object;
       		$GLOBALS['post_object']=$post_object;
       		//setup_postdata($post);
    		$output.=do_shortcode($content);
    	} 
    
    	//wp_reset_postdata();
    	return $output;
    }
    
    function zagolovok_posta($atts, $content) {
    	return get_the_title($GLOBALS['post_object']->ID);
    }
    
    function ssylka_posta($atts, $content) {
    	return get_permalink($GLOBALS['post_object']->ID);
    }
    
    add_shortcode( 'posty', 'posty' );
    add_shortcode( 'zagolovok_posta', 'zagolovok_posta' );
    add_shortcode( 'ssylka_posta', 'ssylka_posta' );
    //add_shortcode( 'anons_posta', 'anons_posta' );
    //add_shortcode( 'polnyj_tekst', 'polnyj_tekst' );

    При попытке использования шорткода пишет, что $GLOBALS[‘post_object’] не определен (в функциях zagolovok_posta и ssylka_posta). Как передать $post_object в них? Или может для моих целей уже есть готовое решение?

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Здравствуйте.

    Для удобства натягивания верстки лучше get_template_part. Верстку вывода поста вынесите в отдельный файл, например, post-content.php и подключайте в цикле . К чему это нагромождение шорткодов?

    На самом деле я использую get_template_part и в functions.php у меня такой код:

    <?php
    get_template_part('includes/widgets');
    <strong>get_template_part('includes/shortcodes');</strong>

    но это не важно

    К чему это нагромождение шорткодов?

    Чтоб посты выводились без своих стилей и верстки (и в будущем не только посты). Многие плагины также подключают кучу своих стилей и скриптов. Но я сначала верстаю макет полностью, а потом только натягиваю его.
    Также, пользователю будет удобней что-то отредактировать в админке (он же не будет лезть в шаблоны)

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «$GLOBALS в functions.php. Как передать?» закрыта для новых ответов.