Получить вложение по значению мета-ключа
Мне нужно получить вложение (будет только по одному на публикацию), связанное с публикацией с помощью meta_key wpcf-legislacion-gratis
(не имеет значения, какое значение имеет столбец), используя пользовательский запрос с использованием функции get_posts()
. Я пробовал это двумя способами:
$nonActivePlan_args = array(
'order' => 'desc',
'meta_query' => array(
array(
'key' => 'wpcf-legislacion-gratis',
'value' => NULL,
'compare' => '!='
)
),
'post_status' => 'inherit',
'posts_per_page' => 1,
'post_type' => 'attachment',
'post_parent' => get_the_ID(),
);
$nonActivePlanAttachment = get_posts( $nonActivePlan_args );
if ($nonActivePlanAttachment) {
foreach ($nonActivePlanAttachment as $attachment) { ?>
<div class="legislacion-ico">
<a class="pdf" href="<?php echo wp_get_attachment_url( $attachment->ID, true ); ?>">
<img src="<?php echo get_template_directory_uri(); ?>/images/ico_descargas.png">
<br>
Descargar PDF
</a>
</div>
<?php
}
}
wp_reset_postdata();
В связи с вышеприведенным у меня есть следующие сомнения:
- Как мне написать запрос для поиска вложения с помощью meta_key, равного
wpcf-legislacion-gratis
, независимо от того, какие значения он имеет? - Является ли цикл в этом случае правильным? Заметьте, я буду у меня есть только один
wpcf-legislacion-gratis
на пост, так что мне нужно зацикливаться на результатах? Не должно быть только одного? - Если я разделю оба вложения (как вы увидите в запросе в конце поста), должен ли я выполнить
wp_reset_postdata()
?
Я пробовал также этот код:
$nonActivePlan_args = array(
'order' => 'desc',
'meta_key' => 'wpcf-legislacion-gratis',
'post_status' => 'inherit',
'posts_per_page' => 1,
'post_type' => 'attachment',
'post_parent' => get_the_ID(),
);
Но не работает, что означает, что я не получаю никакого значения из базы данных. Это результат запроса, который я выполнил в командной строке MySQL:
SELECT * FROM `wp_postmeta` where post_id='11839';
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
| 22149 | 11839 | wpcf-legislacion-gratis | http://jurisprudencia.dev/wp-content/uploads/2015/02/modelodatos.pdf |
| 22150 | 11839 | wpcf-legislacion-pagada | http://jurisprudencia.dev/wp-content/uploads/2015/02/AtencionUsuario_version1.pdf |
+---------+---------+-------------------------+-----------------------------------------------------------------------------------+
Я также проверил документы здесь и здесь , но не нашел ничего полезного для меня.
Как мне получить вложение? Какая-нибудь помощь или совет?
1 answers
Я думаю, что вам нужно get_post_meta()
, а не пользовательский запрос.
ПРИЧИНЫ:
Результаты из пользовательских полей кэшируются и чрезвычайно упрощаются, когда это связано с производительностью. Вы можете прочитать этот ответ Я недавно сделал то, что все объяснит
Вы пытаетесь прикрепить настраиваемое поле к публикации только на одной странице публикации. Это то, для чего
get_post_meta()
был разработан
Вы можете заменить все ваши код с чем-то вроде этого: ( Изменен из кодекса)
$key_1_value = get_post_meta( get_the_ID(), 'wpcf-legislacion-gratis', true );
// check if the custom field has a value
if( ! empty( $key_1_value ) ) {
echo $key_1_value;
}
РЕДАКТИРОВАТЬ
Если вам нужно получить значение настраиваемого поля вне цикла, например, в боковой панели или функции, вам нужно заменить get_the_ID()
на get_queried_object_id()
$key_1_value = get_post_meta( get_queried_object_id(), 'wpcf-legislacion-gratis', true );
// check if the custom field has a value
if( ! empty( $key_1_value ) ) {
echo $key_1_value;
}