get_attached_media () возвращает пустой массив, если медиафайл уже используется другой почтой

Я хочу получить различные файлы PDF и ZIP, прикрепленные к одному сообщению, и отобразить их в определенном разделе вне контента, используя функцию WP get_attached_media() . Хотя мой код работает так же, как и для загружаемых медиафайлов, я не могу заставить его работать, если файл уже загружен и используется в другом сообщении.

Например, предположим, что post ID-1 внедряет файл-1.pdf в контент. Затем, если я создам post ID-2 и снова вставьте файл-1.pdf в содержимое, get_attached_media( 'application/pdf', $post->ID ) вернет пустой массив?!

Я что-то упустил / должен ли я что-нибудь смыть (если да, как …)?

Вот код моего цикла:

петля-single.php

 <?php if ( have_posts() ) : while (have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <?php if ( has_post_thumbnail() ) { $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'item-featured' )['0']; } else { $thumb = false; } $content = preg_replace('/\[gallery.*\]/', '', wpautop( get_the_content() ) ); $the_content_EN = get_extended(get_post_meta(get_the_ID(),'mysecondeditor')['0'])['main']; $the_content;$date_publication; $the_content = apply_filters('the_content', $content ); // Media files ? $pdf = get_attached_media( 'application/pdf', $post->ID ); $zip = get_attached_media( 'application/zip', $post->ID ); $attachments = ($pdf || $zip) ? true : false; // DEBUG info print_r($pdf); print_r($zip); ?> <div class="project"> <h3 class="entry-title"> <?php the_title(); ?> </h3> <div class="left"> <?php if($thumb): ?> <span class="project-img"><img src="<?php echo $thumb; ?>" alt /></span> <?php endif; ?> <?php if ($attachments) : ?> <h4>Downloads:</h4> <ul class="project-files lino"> <?php if ($pdf) foreach($pdf as $m) : ?> <li> <a href="<?php echo ( wp_get_attachment_url($m->ID) ); ?>" target="_blank" class="pdf"><i class="fa fa-file-pdf-o"></i> <?php echo ( wp_get_attachment_link($m->ID) ); ?> </a> </li> <?php endforeach; ?> <?php if ($zip) foreach($zip as $n) : ?> <li> <a href="<?php echo ( wp_get_attachment_url($n->ID) ); ?>" target="_blank" class="zip"><i class="fa fa-file-archive-o"></i> <?php echo ( wp_get_attachment_link($n->ID) ); ?> </a> </li> <?php endforeach; ?> <?php endif; ?> </ul> </div> <div class="entry-content right"> <?php echo $the_content; if ($the_content_EN) : ?> <hr> <section class="lang-en"> <?php echo $the_content_EN; ?> </section> <?php endif; ?> </div><!-- .entry-content --> </div> <div class="clear"></div> </div><!-- #post-## --> <div class="entry-utility"> <?php edit_post_link( __( 'Edit', 'ywp' ), '<span class="edit-link">', '</span>' ); ?> </div><!-- .entry-utility --> <?php endwhile;endif;// end of the loop. ?> 

Я столкнулся с этой проблемой и в итоге создал базовую функцию для извлечения «прикрепленного» носителя по URL-адресу из тела сообщения (в моем случае сообщение типа документа, но оно должно работать с любым типом сообщения):

 function get_first_link_url($post_id) { $content = get_post_field('post_content', $post_id); if ($content == null) { return null; } $dom = new DOMDocument(); $dom->loadHTML($content); $links = $dom->getElementsByTagName("a"); if (count($links) == 0) { return null; } $url = $links[0]->getAttribute('href'); return $url; } 

Это возвращает URL-адрес (href) первого тега в сообщении, но его можно легко изменить, чтобы вернуть все из них в виде массива.