如何在插件选项页面上获取 WordPress 媒体库中的项目列表?

Eva*_*van 5 php wordpress

我正在编写一个 Wordpress 插件,它在所有前端页面的页脚上方注入图像网格。该应用程序用于显示赞助商的徽标。我想利用 WP 媒体库,因为徽标已经上传以供在“赞助”页面和帖子中使用。

本质上,我一直停留在访问插件选项页面上的媒体库界面上。所有跑腿工作都是通过创建选项页面、使用操作挂钩将插件中的内容放置在前端页面等方面完成的。我现在需要的是能够在列表中显示媒体库中的所有文件在选项页面上,并提供一个复选框或其他内容,以允许用户选择某些文件以插入页脚上方。

媒体库 API 似乎是针对编写主题或媒体插件的人。帮助了解要使用什么会很棒!

The*_*dic 5

我认为您最好将自己的专栏添加到现有媒体库中,而不是尝试自己重新编码;

function my_media_col($cols)
{
    $cols['my_col'] = 'Footer';
    return $cols;
}
add_filter('manage_media_columns', 'my_media_col');

function handle_my_media_col($name, $id)
{
    if ($name !== 'my_col')
        return false;
    $in_footer = get_option('in_footer', array());
?>
<input type="checkbox" name="in_footer[]" value="<?php echo $id; ?>" <?php checked(in_array($id, $in_footer)); ?> />
<?php
}
add_action('manage_media_custom_column', 'handle_my_media_col', 10, 2);
Run Code Online (Sandbox Code Playgroud)

然后只需挂接到load-upload.php(库页面)并在发布时保存更改即可;

function save_my_col()
{
    if (!isset($_POST['in_footer']))
        return false;

    $in_footer = $_POST['in_footer'];
    if (is_array($in_footer))
        $in_footer = array_map('absint', $in_footer); // sanitize
    else
        $in_footer = array();

    $in_footer = array_merge(get_option('in_footer', array()), $in_footer);
    $in_footer = array_unique(array_filter($in_footer));
    update_option('in_footer', $in_footer);
}
add_action('load-upload.php', 'save_my_col');
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个示例,我可能有一两个错别字。

更新:

我的代码示例在选项表中的键“in_footer”下存储 ID 数组。

在实践中,您可以将所有媒体项目标记为“页脚”,如下所示;

$query = new WP_Query(array('post__in' => get_option('in_footer', array()) ));

if ($query->have_posts()): while ($query->have_posts()): $query->the_post();
?>

<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

<?php endwhile; endif; ?>
Run Code Online (Sandbox Code Playgroud)