如何获取附加到页面的媒体列表?

时间:2017-02-06 23:41:46

标签: wordpress

我为我网站上的一组特定页面创建了一个模板(称之为A.php)。 如何检索附加到A.php中模板为A.php的页面的媒体列表(以前)? 我希望能够在此A.php模板中遍历该媒体列表。这是A.php的简约版本:

<?php
/**
 * Template Name: test layout 
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage jbWeb 
 * @since 1.0
 * @version 1.0
 */

get_header();


query_posts(array('pagename' => get_query_var('pagename')));

while (have_posts()) {
        the_post();

        ob_start();
        the_title();
        $title = ob_get_clean();
        echo $title;
        $medias = get_attached_media( 'image', get_the_ID());
        foreach($medias as $media) {
                echo ('this is a url: ' . wp_get_attachment_url($media->id));
        }

}

get_footer();
?>

显然,从while(have_posts())循环中检索的唯一帖子是页面本身(或者它是页面本身的内容吗?)。这是我的浏览器上显示的内容: enter image description here 从未显示附加到页面的任何媒体的URL。当我将四张照片附加到&#34; pagetest1&#34;时,只有两个媒体。 这是我的页面管理页面&#34; pagetest1&#34;好像: enter image description here

1 个答案:

答案 0 :(得分:0)

这里有一个我发现的解决方案,允许显示任何类型的媒体(你只需调整我将展示的解决方案的一部分):

<?php
/**
 * The template for displaying all pages
 * Template Name: test layout 
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage jbWeb 
 * @since 1.0
 * @version 1.0
 */

get_header();


//the query to select the post id of the post containing all content of this page.
//have to replace pageTest by get_query_var('pagename')
$page_content = $wpdb->get_var(
        $wpdb->prepare("
                select post_content from (select max(post_date) as post_date from wp_posts
                        where post_title='%s' group by post_title) as sub, 
                        wp_posts as p where p.post_date = sub.post_date ;",
                get_query_var('pagename'))
);

$matches = array();
preg_match_all('/<img.*\/>/mU', $page_content, $matches, PREG_PATTERN_ORDER);
foreach ($matches as $m) {
        foreach ($m as $m1) {
                echo $m1 . "\n";
        }
}

get_footer();
?>

<强>解释

mysql查询 所以首先在mysql数据库上进行查询,在这里我选择了其模板为&#34;测试布局&#34;的页面内在的最新版本的内容。我将get_query_var(&#39; pagename&#39;)作为参数传递给此mysql查询,此get_query_var函数返回当前页面名称。

模式匹配 然后我在该帖子的内容中找到<img/>标记的所有出现。关于模式中的m和U选项:m表示我希望输入$ page_content被视为单行。并且U表示我希望正则表达式不贪婪,因此我找到所有标签而不只是一个包含其他标签的标签。

打印结果 最后,双foreach循环在该结果页面中打印所有<img/>标记。

注意:您可以以相同的方式查找<video/>标记的所有出现。只需将模式中的<img.*\/>替换为<video.*\/>

即可