Поддержка Проблемы и решения Хранение данных в wp_posts и wp_postmeta

Просмотр 15 ответов — с 16 по 30 (всего 145)
  • Модератор Юрий

    (@yube)

    Например так

    
    if (isset($_POST['form_1'])) {
     include( get_stylesheet_directory()  . '/forms/form_1.php' );
    }
    
    Автор Dmitry Kohan

    (@dmay1989)

    Спасибо огромное ! Столкнулся с ещё одной трудностью
    @yube , подскажите, пожалуйста, а как быть с промежуточными данными, которые пользователь не вводит в форму, а которые вычисляются через ajax-запрос в зависимости от его выбора ? (если вкратце: пользователь выбирает дату, на основе этой даты я лезу в базу и нахожу нужный коэффициент, в functions.php вывожу его через echo "$index_build"; и записываю посредством ajax из custom.js в элемент формы span:

    function (response) 
      {$span.text(response);}

    Но как эту переменную передать в обработчик формы /forms/form_1.php ? при прямом обращении к $index_build из form_1.php естественно возникает ошибка, может есть какой-то другой вариант обращения к этой переменной? или нужно записывать её в <input type=»hidden»> и затем передавать в form_1.php ?

    Модератор Юрий

    (@yube)

    Как вариант

    <form>
      <input type="hidden" name="foo">
    
    jQuery(input[name=foo]).val(response);
    
    Автор Dmitry Kohan

    (@dmay1989)

    Спасибо огромное, применяю данный вариант — всё работает
    @yube , можно ещё вопрос по поводу хранения данных в таблицах posts и postmeta: если параметры передаваемые из формы хранить отдельно в postmeta, могу ли я выводить данные параметры также в поле post_content соответствующей записи таблицы posts ?

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , извините ещё раз за беспокойство
    Что я имел ввиду:
    Вы не подскажете, можно ли из поля post_content обратиться к конкретному произвольному полю данной записи в таблице postmeta посредством функции get_post_meta() и вывести таким образом значение данного метаполя здесь же в поле post_content таблицы posts ?

    Модератор Юрий

    (@yube)

    можно ли из поля post_content обратиться

    Из поля никуда обратиться нельзя, потому что поле — данные. Обратиться можно только из программы.

    вывести таким образом значение данного метаполя здесь же в поле post_content таблицы posts ?

    В поле таблицы БД можно только хранить данные, но никак не выводить.

    Это не придирки, это попытки расставить всё по своим местам. Когда расставится, тогда, отпадет много вопросов.

    Например, отпадет вопрос «можно ли в шаблоне вместо the_content() написать echo get_postmeta(the_ID(), 'meta_name', 1)«. Отпадет потому, что очевидно же можно.

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо большое за ответ, понял свою ошибку
    Поясню свою идею:
    я пытаюсь, чтобы поле post_content при выводе пользователю зависело от содержимого полей meta_value данного поста в таблице postmeta;
    Вопрос:
    имеет ли право на жизнь реализация данной идеи посредством шорт-кодов ?
    т.е. в поле post_content среди прочего текста будет прописано что-то вроде

    [post id=8 meta_1='meta_name' meta_2='meta_name_2']

    где id — это id данной записи,
    meta_n — это некий meta_key записи.
    В functions.php темы размещаю соответствующую функцию, которая будет извлекать все meta_value соответствующей записи из базы посредством
    $meta = get_post_meta($id,$meta_n,true);
    и подставлять их вместо шорт-кода при выводе поля post_content.
    Вроде всё расставил. Имеет ли право на жизнь такая реализация ?

    Автор Dmitry Kohan

    (@dmay1989)

    и соответственно при изменении meta_value в таблице postmeta автоматом при посещении пользователем страницы с данной записью изменится при выводе её post_content. Верно я рассуждаю ?

    Модератор Юрий

    (@yube)

    имеет ли право на жизнь реализация данной идеи посредством шорт-кодов ?

    Имеет, конечно. Но я бы сделал не кучей, а по одному, типа [meta key='foo']. И если не планируется выводить «чужие» мета, то нет смысла передавать id. Впрочем, можно сделать его необязательным, с дефолтным = getID().

    при выводе поля post_content.

    Есть одна тонкость. Вывод поля $post->post_content и результат работы функции the_content() — две большие разницы. При выводе поля шорткоды так и останутся буковками в квадратных скобочках.

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо
    Как раз с id поста у меня заминка. «Чужие» мета выводить не планирую. Но как быть с id данного текущего поста ? Добавляется пост через фронт-энд пользователем после отправки формы:

    $post_data = array(
    'post_title'    => "$heat_name_object",
    'post_content'  => "<table class='table table-bordered'>
                          <tr><td>Дата</td>
    <td>[post id=$post_id key='meta_name'</td></tr></table>",
    'post_status'   => 'publish'
    );
    $post_id = wp_insert_post( wp_slash($post_data) );
    update_post_meta( $post_id, 'meta_name', "$heat_region" );

    т.е. на момент формирования $post_data ещё ведь неизвестно $post_id, его можно в принципе не указывать ? или пост сначала нужно добавить, а потом уже обновить и прописать в post_content данный шорт-код и в нем указать getID() ? Этот момент не понял (т.е. если не указать id, система возьмет текущий?)
    <br>
    ps Можно также вопрос, как в админке для постов отобразить блок «Произвольные поля»? Нужно писать код, или это делается средствами админки ? (не могу понять)

    Модератор Юрий

    (@yube)

    его можно в принципе не указывать ?

    Конечно. Главное, чтобы обработчик шорткода мог его получить, а для этого существует функция get_the_ID.

    как в админке для постов отобразить блок «Произвольные поля»?

    Справа вверху «настройки экрана» для классики или ⋮ → Настройки для блочного (гутенберга)

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , по поводу отображения в админке произвольных полей вы писали:

    Справа вверху «настройки экрана» для классики

    Но там нет ничего подобного: http://prntscr.com/sfuyop
    Из учебника по WP:

    WordPress добавляет метаполе произвольных полей на экран редактирования записи по умолчанию, как показано здесь: http://prntscr.com/sfuznu

    Если я открываю запись на редактирование (запись типа post, произвольные поля добавлены с помощью update_post_meta()) — произвольных полей нет, вижу следующее: http://prntscr.com/sfv27j
    Подскажите, пожалуйста, что я делаю не так или что-то упустил и не сделал ?

    Модератор Юрий

    (@yube)

    Но там нет ничего подобного:

    Потому что это там совсем не там. Список записей и редактор записи — разные вещи.

    Подскажите, пожалуйста, что я делаю не так или что-то упустил и не сделал ?

    Ну я же написал

    ⋮ → Настройки

    Вот картинка:
    screenshot

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо ещё раз
    Подскажите ещё, пожалуйста, а если редактировать произвольные поля из фронт-энда ? в WP есть какая-то специальная функция подобно следующей для поста
    edit_post_link("Изменить запись № $i",'','','','button special small'); ?
    Также наткнулся на вопрос касательно поля post_content_filtered таблицы posts — временный контент записи, нашел его объяснение:

    Там хранится временный контент… WordPress не использует это поле вообще, оно для плагинов. Оно устанавливается как пустое при каждом обновлении записи, кроме случаев, когда оно не указано. Т.е. если при обновлении записи это поле указано, оно будет записано, но если при другом обновлении оно не указано, оно сотрется.

    Записал в post_content_filtered данные, потом изменил название поста, рубрику. Поле post_content_filtered не очистилось, оно теперь не очищается и в принципе его можно использовать для хранения неких данных ?

    Модератор Юрий

    (@yube)

    Откуда взяться «специальной функции», если в WP вообще нет фронт-эндного редактирования?

    в принципе его можно использовать для хранения неких данных ?

    Конечно можно. Но ровно до момента активации плагина, автор которого тоже подумал «зачем полю пропадать?» и использовал поле для своих целей.

Просмотр 15 ответов — с 16 по 30 (всего 145)
  • Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.