Поддержка Проблемы и решения Получение данных записи вне цикла wordpress

  • На странице записи получаю необходимые данные через следующий код, всё работает как надо:

    $record= $post->ID; // ID поста
    $user_1 = get_post_meta($post->ID,'user_1',1); // id требуемого пользователя

    Но, если разместить данный код в functions.php и выводить его через шорткод на странице записи, то он уже не работает, не могу понять почему.
    Вот код из functions.php:

    function example(){
    global $wpdb;
    global $post;
    $record= $post->ID; // ID поста
    $user_1 = get_post_meta($post->ID,'user_1',1); // id требуемого пользователя
    }
    add_shortcode( 'exle', 'example' );

    Как заставить работать?)

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Yuri

    (@yube)

    Обработчик шорткода в конце работы должен вернуть (оператор return) что-то, что будет вставлено в контент записи вместо самого шорткода. У Вас же ничего не возвращается. Даже если код работает, Вы этого невооруженным глазом не увидите.

    echo или return.

    Ну добавлю я в вышенаписанную функцию:
    echo $record
    или
    echo $user_1

    id поста или id записи всё равно не выводится на странице

    Забыл уточнить, функция запускается через крон.
    Сам крон работает, так как для теста я создал функцию отправки письма на e-mail в functions.php, письмо пришло на указанный e-mail, как того и требовалось.
    Тут проблема заключается в том, что крон не видит глобальную переменную $post или что-то в этом роде.
    Может при запуске функции через крон нужно глобальные переменные по другому объявлять. Второй день голову ломаю, как решить(

    • Ответ изменён 6 лет, 10 месяцев назад пользователем dmitryi92.
    Модератор Yuri

    (@yube)

    Тут проблема заключается в том, что крон не видит глобальную переменную $post или что-то в этом роде.

    Эта переменная нужна для вывода на фронт-энд, поэтому для фронт-энда она и подобные ей инициализируются, причем в зависимости от того, что выводится. А Хрону выводить нечего, поэтому он выборку записей не делает и имеющие к выборке переменные не инициализирует. Угадывать он тоже не умеет. Хотите в хроновой задаче получить какую-то запись — делайте явный запрос get_post(), указывая какая именно запись нужна.

    Да, я делал таким способом.
    $record = get_post( $id );
    Но суть в том, что записи создаются постоянно, не вписывать же новые id каждый раз.
    Может возможно передавать в переменную динамически формируемый массив со всеми новыми id записей?

    Модератор Yuri

    (@yube)

    Может возможно передавать в переменную динамически формируемый массив со всеми новыми id записей?

    Home


    Прописывайте нужные аргументы и получаете на выходе массив записей. Дальше тривиальный цикл по массиву.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Получение данных записи вне цикла wordpress» закрыта для новых ответов.