推广 热搜: 后台  帝国cms  位置  网站  帝国cms建站  Wordpress教程  内容  DESTOON  邮箱  destoon7.0 

WordPress获取当前日志的所有附件的方法

   日期:2019-04-20     浏览:173    违规举报
 
腾讯云服务器优惠

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_');

注:最后代码参考自乱炖。

免责声明:
1、本站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
2、本站部分作品内容是由网友自主投稿和发布、编辑整理上传,对此类内容本站仅提供交流平台,不为其版权负责,更不为其观点承担任何责任。
3、因行业及专业性有限,故未能核验会员发布内容的真实性及有效性,不为其负责,如有虚假或违规内容敬请准备材料图片发邮件到info@n360.cn举报,本站核实后积极配合删除。
4、如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时处理或删除。
 
打赏
 
更多>同类网站技术
0相关评论

推荐图文
推荐网站技术
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  免责声明  |  版权隐私  |  信息发布规则  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2020081222号
Powered By DESTOON