как отобразить пользовательские данные из пользовательских типов записей - PullRequest
10 голосов
/ 05 ноября 2011

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

Я хочу иметь возможность получать эти пользовательские типы записей (что я и сделал, используя WP_Query и указав post_type для имени моего пользовательского типа записи). Когда я вызываю print_r для возвращаемого объекта, нигде в объекте не хранятся пользовательские данные (строки и даты). Как бы я получить их из базы данных?

Я часами осматривался и не нашел подходов к получению этих данных.

По запросу: данные хранятся так:

function update_obituary(){
    global $post;
    update_post_meta($post->ID, "first_name", $_POST["first_name"]);
    update_post_meta($post->ID, "last_name", $_POST["last_name"]);
    update_post_meta($post->ID, "birth_date", $_POST["birth_date"]);
    update_post_meta($post->ID, "death_date", $_POST["death_date"]);
    update_post_meta($post->ID, "publication_date", $_POST["publication_date"]);
}

Эта функция связана с хуком save_post. Данные будут отображаться заново, когда я снова открою экземпляр пользовательского типа сообщения в режиме редактирования. Это означает, что он хранится в базе данных, верно?

1 Ответ

11 голосов
/ 05 ноября 2011

Если метаданные появляются при редактировании сообщений такого типа, то да, они должны быть успешно сохранены в БД.

Есть две функции wp для извлечения метаданных пользовательского типа записи: get_post_custom_values и get_post_meta.Разница в том, что get_post_custom_values может обращаться к неуникальным настраиваемым полям, то есть к тем, у которых более одного значения связано с одним ключом.Вы можете также использовать его для уникальных полей - вопрос вкуса.

Предполагая, что ваш тип сообщения называется "некролог":

// First lets set some arguments for the query:
// Optionally, those could of course go directly into the query,
// especially, if you have no others but post type.
$args = array(
    'post_type' => 'obituary',
    'posts_per_page' => 5
    // Several more arguments could go here. Last one without a comma.
);

// Query the posts:
$obituary_query = new WP_Query($args);

// Loop through the obituaries:
while ($obituary_query->have_posts()) : $obituary_query->the_post();
    // Echo some markup
    echo '<p>';
    // As with regular posts, you can use all normal display functions, such as
    the_title();
    // Within the loop, you can access custom fields like so:
    echo get_post_meta($post->ID, 'birth_date', true); 
    // Or like so:
    $birth_date = get_post_custom_values('birth_date');
    echo $birth_date[0];
    echo '</p>'; // Markup closing tags.
endwhile;

// Reset Post Data
wp_reset_postdata();

Слово предостережения, чтобы избежатьпутаница: оставляя логическое значение в get_post_meta, он вернет массив, а не строку.get_post_custom_values всегда возвращает массив, поэтому в приведенном выше примере мы повторяем $birth_date[0], а не $birth_date.

Также на данный момент я не уверен на 100%,будет ли $post->ID работать так, как ожидалось выше.Если нет, замените его на get_the_ID().Оба должны работать, один будет точно.Можно проверить это, но сэкономить время ...

Ради полноты, проверьте кодекс на WP_Query, чтобы узнать больше аргументов запроса и правильное использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...