【问题标题】:how to get the list of medias attached to a page?如何获取附加到页面的媒体列表?
【发布时间】:2017-02-08 00:09:54
【问题描述】:

我为我网站上的一组特定页面创建了一个模板(称为 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。当我将四张照片附加到“pagetest1”时,只有两种媒体。 这是我的页面“pagetest1”的管理页面的样子:

【问题讨论】:

  • 所以澄清一下,您需要获取附加到使用A.php 模板的任何页面的媒体列表吗?到目前为止,您尝试过什么?
  • @NathanDawson 是的。我编辑了我的帖子以添加更多信息。

标签: wordpress


【解决方案1】:

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

<?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 数据库上执行该查询,在该查询中我选择模板为“测试布局”的页面固有的最新版本帖子的内容。我将 get_query_var('pagename') 作为参数传递给这个 mysql 查询,这个 get_query_var 函数返回当前页面名称。

模式匹配 然后我在该帖子的内容中找到所有出现的&lt;img/&gt; 标签。关于模式中的 m 和 U 选项: m 表示我希望将输入 $page_content 视为单行。 U 表示我希望正则表达式不贪婪,以便我找到所有标签,而不仅仅是一个包含其他标签的标签。

打印结果 最后,双 foreach 循环打印该结果页面中的所有 &lt;img/&gt; 标记。

注意:您可以以相同的方式找到所有出现的&lt;video/&gt; 标签。只需将模式中的&lt;img.*\/&gt; 替换为&lt;video.*\/&gt;

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 2013-03-11
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2022-12-24
    • 1970-01-01
    相关资源
    最近更新 更多