WordPress获取当前日志的所有附件的方法
WordPress 3.6 推出了一个新的函数:get_attached_media(),使得获取一个指定日志的所有附件文件变得异常简单。
以前如果我们要获取指定日志的所有图片:我们需要通过类似如下的代码:
$args = array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'ASC', ); $attachments = get_posts( $args );
WordPress 3.6 新增的 get_attached_media() 函数使得这个过程更加简洁: 获取所有附件,不管什么类型:
$attachments = get_attached_media( '', $post->ID );
获取所有的音频附件:
$attachments = get_attached_media( 'audio', $post->ID );
获取所有图片附件:
$attachments = get_attached_media( 'image', $post->ID );
获取所有视频附件:
$attachments = get_attached_media( 'video', $post->ID );
上述wordpress官方的第一段代码是通过查询wp_posts表中所有post_parents字段为post_ID,并且post_type为attachment的数据,这样就会造成两个问题
1、只统计插入的图片,不统计删除的图片
2、post_parents的字段类型为BIGINT,这样只能统计一次,比如你在日志A插入了图片I,之后在日志B中再插入图片I,这样就没办法同时统计了
这样看来wordpress统计当前日志附件相当不准。 如何修正呢 修正之前思考这么几个问题:
1、用什么来记录当前日志的附件?
2、在什么地方进行统计
3、该如何取出
关于记录日志的附件,选择了postmeta这个表来记录,增加一个meta_key;至于在什么地方统计,选择钩子save_post,整体代码如下:
add_action('save_post', 'save_post_my_func', 10 , 2); function save_post_my_func() { global $wpdb; $content = $post->post_content; if (!stristr($content, '/wp-content/uploads/')) { // 如果说当前日志中没有任何附件链接,我将这个字段更新为空 update_post_meta($post_id, '_wp_post_attach_total_', ''); return ; } $data = array(); if (preg_match_all('/(href|src)=[^>]+\/wp\-content\/uploads\/(sites\/\d+\/)?([^"\'>\s]+)["\'>\s]/is', $content, $match)) { // 统计所有带有附件链接的img还有link $files = array_flip(array_flip($match[3])); $sql = sprintf("SELECT `post_id` FROM `%s` WHERE `meta_key`='_wp_attached_file' AND (`meta_value`='%s');", $wpdb->postmeta, implode("' OR `meta_value`='", $files)); (FALSE != ($row = $wpdb->get_col($sql))) && $data = $row; } // 统计日志中的相册 if (preg_match_all('/\?)([^"\'\]]*)\1\s*\]/is', $content, $gallery)) { $where = array(); $gallery = explode(',', implode(',', $gallery[2])); foreach ($gallery as $val) { $where[] = '`post_id`='.trim($val); } $sql = sprintf("SELECT `post_id` FROM `%s` WHERE `meta_key`='_wp_attached_file' AND (%s);", $wpdb->postmeta, implode(' OR ', $where)); (FALSE != ($row = $wpdb->get_col($sql))) && $data = array_merge($data, $gallery); } // 统计当前日志中的缩略图 if (FALSE != ($thumb_id = get_post_meta($post_id, '_thumbnail_id'))) { $data[] = $thumb_id[0]; } // 为了后续扩展,以及向其他应用开放扩展,这里我创建了一个过滤钩子 $data = apply_filters('wp_post_attach_total', $data, $post_id); if (!empty($data)) { $data = array_flip(array_flip($data)); update_post_meta($post_id, '_wp_post_attach_total_', implode(',', $data)); } }
大家可以通过下面的代码获取当前日志附件
get_post_meta($post_id, '_wp_post_attach_total_');
注:最后代码参考自乱炖。
(资源库 www.zyku.net)
您可能感兴趣的文章
- 06-03Nginx状态监控以及日志分析详解
- 04-22Haproxy增加日志记录功能
- 08-02Xshell日志的保存方法
- 09-28帝国CMS附件使用又拍云存储加速的方法
- 09-16帝国CMS利用七牛云存储加速网站附件的方法
- 09-15帝国CMS修改图片附件默认上传路径的方法
- 04-03CentOS 7.0下nginx实现每天定时分割日志
- 03-13WordPress实现评论后可显示内容中附件下载地址的方法
- 03-04wordpress上传中文名附件乱码问题的解决方法
- 02-23DedeCMS附件上传后不自动改名的实现方法
- 12-01搜狗输入法开启完全访问权限流程一览
- 12-28会议记录管家-会议记录管家应用软件功
- 01-30小米10设置显示网速方法
- 01-11小学数学口算题卡-小学数学口算题卡应
- 02-19Discuz提示“未定义操作”常见原因分
- 12-11iqoo8如何设置抬手亮屏
- 01-18无秘不聊-无秘不聊应用软件功能介绍
- 09-20网易云音乐怎么扫描全部本地音乐
- 12-06快手拍摄时怎么显示歌词
- 01-19个性签名网名分组-个性签名网名分组应
最近更新
阅读排行
猜你喜欢
- 03-31pytorch Dropout过拟合的操作
- 01-28红米note9pro状态栏启用电量百分比样
- 11-23QQ音乐头像城市挂件在哪里设置
- 02-03小米手机录屏开启声音方法
- 07-06鸿蒙系统截长图教程分享
- 02-23DedeCMS默认编辑器将回车br标签改为p
- 01-12水提醒健康喝水-水提醒健康喝水应用软
- 01-12掌上金山医院-掌上金山医院应用软件功
- 12-24小米打印机绑定手机方法一览
- 02-23DedeCms后台验证码错误的解决方法