• Всем доброго дня.

    Словил затык на ровном месте…
    У записи есть мета поле с именем incut.
    В текст записи добавляется шорткод [incut]
    Добавляю в functions.php код

    
    global $incut;
    	$incut = get_post_meta( get_the_ID(), 'incut', false);
    	add_shortcode('incut', 'incut_func');
    	function incut_func() {
    		global $incut;
    		if (is_single()){
    			return '<div class="incut">'.$incut[0].'</div>';
    		}
    
    	}
    

    В итоге шорткод срабатывает (выводится <div class="incut"></div>), но содержимое мета поля не выводится %)
    При этом если в single.php добавить похожий код

    $incut = get_post_meta( get_the_ID(), 'incut', false);
    echo '<div class="incut">'.$incut[0].'</div>';

    Всё работает %)

    Проблема с get_post_meta в functions.php
    print_r($incut);
    Возвращает 1
    А в single.php возвращает массив, где в [0] лежит контент…
    get_the_ID() в functions.php возвращает корректный id поста…

    Что я упустил?

    Заранее спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Юрій

    (@yube)

    Что я упустил?

    Что

    global $incut;
    $incut = get_post_meta( get_the_ID(), 'incut', false);
    

    может сработать до того, как будет выполнена инициализационная выборка и глобальная переменная $post получит осмысленное значение.

    Перенесите $incut = get_post_meta( get_the_ID(), 'incut', false); в обработчик шорткода.

    @yube, вот блин, а я больше часа убил, ковырял и так и так…
    Такая конструкция с global и get_post_meta за пределами функции шорткода досталась в наследство от другого похожего куска кода, но там она работает (правда там не шорткод а add_filter на content), я даже и не мог подумать на это %)

    Спасибо огромное!!!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Проблема с get_post_meta» закрыта для новых ответов.