get_post_meta()
Набуває значення довільного поля запису (поста). Дозволяє також отримати всі метаполі.
Щоб отримати значення всіх довільних полів певного посту, потрібно залишити порожнім параметр $key . Також для цього можна скористатися функцією get_post_custom() .
Якщо даних міститься серіалізований масив (serialize), він автоматично буде оброблений функцією unserialize() , тобто. щоб отримати серіалізовані дані, їх не потрібно окремо обробляти функцією unserialize() .
get_metadata()
get_header_image_tag() ,
get_the_modified_author() ,
get_attached_file() ,
get_page_template_slug() ,
wp_get_attachment_url() ,
get_post_thumbnail_id (
) ,
(повільно) | 50000 разів – 0.12 сек
(дуже швидко) |
PHP 7.4.25, WP 6.0
Хуків немає.
Повертає
Разное.
Якщо у значенні метаполя зберігається число воно буде повернено у вигляді рядка, наприклад, "54"…
Поверне
false, коли неправильно передано параметр $post_id (не-numeric, 0 чи негативне значення).- При $single = true
строка/массивколи метаполі є.''коли метаполя немає.
- $ single = false
массив значений метаполейколи метаполі є.array()коли метаполя немає.
Використання
$meta_values = get_post_meta( $post_id, $key, $single );
- $post_id
(число) (обов’язковий) - ID посту, довільні поля якого потрібно отримати.
- $key
(рядок) - Назву довільного поля, значення якого потрібно отримати. Якщо залишити поле порожнім, буде отримано всі довільні поля посту.
За замовчуванням: ” - $single
(логічний) true– поверне значення метаполя (якщо полів дещо поверне значення першого метаполя).
false– Поверне масив всіх значень мета полів із зазначеним ключем.Якщо значення довільного поля знаходиться серіалізований масив, то значення
trueповерне, нормальний масив, і якщо вказатиfalse, то повернеться масив, де у ключі ” [0] ” лежатиме той самий серіалізований масив.Цей параметр працює тільки якщо вказано параметр $key!
Типово: false
Приклади
#1 Перевіримо існування вказаного метаполя
Коли потрібно перевірити, чи існує поле, з будь-яким значенням: порожній рядок або 0:
$metas = get_post_meta( $post->ID );
if( isset( $metas['key_name'] ) ){
echo 'Мета поле "key_name" існує, не важливо яке там значення.';
}#2 Підрахунок кількості всіх довільних полів усіх записів
Цей приклад показує як одним запитом вивести всі унікальні довільні поля і порахувати скільки їх використовується в БД. Такий запит може стати в нагоді для профілювання довільних полів записів:
Global $wpdb; $data = $wpdb->get_results( "SELECT meta_key, count(*) як count FROM $wpdb->postmeta WHERE meta_key NOT LIKE '_oembed%' GROUP BY meta_key" ); print_r ($ data); /* Array ( [0] => stdClass Object ( [meta_key] => _edit_lock [count] => 2300 ) [1] => stdClass Object ( [meta_key] => _edit_last [count] => 2123 ) ... ) */
#3 Приклад використання get_post_meta() всередині циклу WordPress.
Приклад нижче показує, як використовувати функцію для отримання значення довільного поля thumb, у значенні якого зберігається посилання на картинку-мініатюру, для того щоб отримати це посилання і використовувати її в шаблоні.
<?php
$thumb = get_post_meta($post->ID, 'thumb', true);
if ($thumb) {
?>
<a href="<?php the_permalink() ?>" rel="bookmark">
<img class="thumb" src="<?php echo $thumb ?>" alt="<?php the_title(); ?>" />
</a>
<?php
}
?>#4 Використання функцій довільних полів на прикладі авторської функції
#5 Отримаємо масив значень довільних полів
Отримаємо значення полів посту 76, ключ яких дорівнює key_1, мається на увазі що пост постає кілька довільних полів з ключем key_1:
$ values = get_post_meta( 76, 'key_1' ); /* Array ( [0] => значення 1 [1] => значення 2 ) */
#6 Отримаємо всі довільні поля запису
Якщо не вказати ключ довільного поля для функції, вона отримає всі поля відразу:
$ Metas = get_post_meta (76); /* Array ( [_edit_lock] => Array ( [0] => 1517175359:1 ) [_edit_last] => Array ( [0] => 1 ) 16 views => Array ( [0] => 10164 ) [_thumbnail_id] => Array ( [0] => 9556 ) [photo] => Array ( [0] => https://wp-doc.com/wp-content/uploads/2010/03/Quicktags-API.png [1] => https://wp-doc.com/wp-content/uploads/2017/07/image.png ) ) */
#7 Отримаємо лише одне довільне поле
Щоб отримати лише перше (або єдине) значення довільного поля у вигляді рядка, використовуємо такий виклик функції:
$ value = get_post_meta (76, 'key_1', true); //> значення 1
#8 Об’єднання всіх метаполів в об’єкт
Цей приклад показує якомога зручніше об’єднати всі довільні поля запису.
Потрібно це, коли в коді передбачається використовувати багато різних полів запису. Отримувати кожне за допомогою цієї функції не зручно, зручніше отримати один раз усі поля, створити з них об’єкт і брати дані з об’єкта – це працює швидше, і коду менше, і зрозуміліше.
Мається на увазі, що ключі довільних полів не в кирилиці і біля поля з одним ключем передбачено лише одне значення – все це звичайне явище:
// Зберемо всі метаполя в об'єкт $meta $meta = new stdClass; foreach( (array) get_post_meta( $post->ID ) as $k => $v ) $meta->$k = $v[0]; // Тепер, припустимо запис є метаполі 'book' // Отримуємо його так: echo $meta->book;
WordPress має незадокументовану можливість отримувати метаполі запису так: $post->my_meta_key , де $post – об’єкт WP_Post, а my_meta_key – назва метаполя, яку потрібно отримати.
#9 Перевірка, що мета-поле існує
// для single значення
$ value = get_post_meta (76, 'key_1', true);
if( '' !== $value ){
// мета-поле є
}
// для multiple значення
$ value = get_post_meta( 76, 'key_1' );
if( [] !== $value ){
// мета-поле є
}
список змін
| З версії 1.5.0 | Введено. |
Код get_post_meta() get post meta WP 6.0.2
function get_post_meta( $post_id, $key = '', $single = false ) {
return get_metadata( 'post', $post_id, $key, $single);
}