我为我网站上的一组特定页面创建了一个模板(称之为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())
循环中检索的唯一帖子是页面本身(或者它是页面本身的内容吗?)。这是我的浏览器上显示的内容:
从未显示附加到页面的任何媒体的URL。当我将四张照片附加到&#34; pagetest1&#34;时,只有两个媒体。
这是我的页面管理页面&#34; pagetest1&#34;好像:
答案 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.*\/>