从帖子上载媒体时post_parent
属性设置为要从中上载的帖子ID。当您简单地从库中插入帖子时,情况并非如此:在这种情况下,如果媒体已连接到帖子,则其post_parent
已设置,并且一旦媒体只能有一个父级,you can\'t get the media using get_posts
.
然而,有很多方法可以做到这一点。如果您的目标只是使用媒体的url输出一些内容,那么最好的选择可能是使用短代码。
如果您需要url来做一些事情,可以使用正则表达式从帖子内容中提取pdf url。
如果您使用的是WP 3.7+,则有一个函数wp_extract_urls
这对你完成任务有很大帮助。
在这里,我发布了一个通用函数,用于从帖子内容中提取URL,并通过其扩展收集URL:
function post_media_urls( $target = \'\' ) {
if ( empty($target) ) {
$target = get_the_content();
} elseif ( is_numeric($target) ) {
$post = get_post($target);
$target = empty($post) ? FALSE : $post->post_content;
}
if ( empty($target) ) return false;
// apply filters to support shortcodes
$target = apply_filters(\'the_content\', $target);
// extract urls
$urls = wp_extract_urls( $content );
$out = array();
if ( ! empty($urls) ) {
// parse only several media extensions, but allow filtering
$exts = apply_filters( \'post_media_urls_exts\', array(\'jpg\',\'gif\',\'png\',\'pdf\') );
foreach( $urls as $url ) {
$ext = strtolower( pathinfo( basename($url) , PATHINFO_EXTENSION ) );
if ( $ext === \'jpeg\' ) $ext = \'jpg\';
if ( ! empty($ext) && in_array( $ext, $exts) ) {
if ( ! isset($out[$ext]) ) $out[$ext] = array();
$out[$ext][] = $url;
}
}
}
return $out;
}
此功能可通过三种方式使用。首先是传递帖子id:
$urls = post_media_urls(10);
第二个是传递帖子内容(实际上是任何字符串):
$urls = post_media_urls($post->post_content);
第三个是在循环中使用它,没有任何参数,将用于当前的帖子内容:
$urls = post_media_urls();
在这三种情况下,您得到的都是URL的关联多维数组,其中第一级键是文件扩展名(小写),类似于:
Array(
[pdf] => Array(
[0] => \'http://example.com/wp-content/2014/01/sample.pdf\',
[1] => \'http://example.com/wp-content/2014/01/sample2.pdf\'
),
[jpg] => Array(
[0] => \'http://example.com/wp-content/2014/01/sample.jpeg\',
[1] => \'http://example.com/wp-content/2014/01/sample2.jpg\',
),
[gif] => Array(
[0] => \'http://example.com/wp-content/2014/01/sample.gif\',
)
)
在您的示例中,函数的使用应如下所示:
$args = array( \'category_name\' => \'referenze\', \'paged\' => get_query_var(\'paged\') );
$my_query_referenze = new WP_Query( $args );
while ( $my_query_referenze->have_posts() ) : $my_query_referenze->the_post();
$content_referenze = apply_filters(\'the_content\', get_the_content() );
$attachments_referenze = post_media_urls();
// to get only pdf
if ( ! empty($attachments_referenze) && isset($attachments_referenze[\'pdf\']) ) {
foreach ( $attachments_referenze[\'pdf\'] as $pdfurl ) {
$indirizzoallegato_referenze = $pdfurl
}
}
endwhile;
当然可以使用此功能
only if the media urls you want to retrive are inserted inside the post content.
An additional note. 该函数不解析所有URL,只解析以一组特定文件扩展名结尾的URL,这样会跳过任何web链接(例如到其他网站页面的链接)。我使用了一组非常有限的扩展,但我还插入了一个过滤器\'post_media_urls_exts\'
允许更改允许的扩展名。