WordPress统计当前日志中所有的附件错误怎么解决
发布:smiling 来源: PHP粉丝网 添加日期:2014-06-21 14:41:37 浏览: 评论:0
今天发现wordpress博客自带的统计当前日志中所有的附件有问题,并不能正确的统计出来,后来经过反复调整最后是可以了,下面我把具体的方法与各位分享.
在这里稍微分析下原理:无论是wordpress什么版本,原理都是一样的,都是通过这段核心代码进行查询.
- $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 );
这样就OK了吗?大家可以做一个这样的测试:先在一篇日志中插入5张图,保存,然后从这几张图中,随便删除2张,修改,保存(这个时候日志中只有3张图了),最后用这个函数再来看,输出还是5个post数据.
为什么会这样?
这段代码是通过查询wp_posts表中所有post_parents字段为post_ID,并且post_type为attachment的数据,这样就会造成两个问题.
只统计插入的图片,不统计删除的图片,post_parents的字段类型为BIGINT,这样只能统计一次,比如你在日志A插入了图片I,之后在日志B中再插入图片I,这样就没办法同时统计了.这样看来wordpress统计当前日志附件相当不准.
我是如何修正的,我思考了这么几个问题?用什么来记录当前日志的附件?在什么地方进行统计,该如何取出,关于记录日志的附件,我选择了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('/?)([^"']]*)1s*]/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 (!emptyempty($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_');
为什么要做这样的研究,初衷原本是要统计wordpress有多少附件是上传后却用不到的,却发现wordpress提供的功能却有问题。
Tags: 附件 错误 日志
相关文章
- ·WordPress上传中文附件乱码解决方法(2014-03-22)
- ·wordpress上传附件提示抱歉,出于安全的考虑,不支持此文件类型(2014-03-22)
- ·wordpress如何修改默认上传附件限制大小(2018-12-18)
- ·修改固定链接后不能访问文章问题_访问时提示404错误(2014-01-09)
- ·WordPress站点出现404错误时邮件通知管理员(2014-03-18)
- ·Wordpress分类_标签 分页显示 翻页出现404错误(2014-03-18)
- ·WordPress禁止输出错误信息设置方法(2014-03-19)
- ·godaddy空间wordpress中文标签404错误(2014-03-19)
- ·WP Super Cache插件的时间戳错误解决办法(2014-03-19)
- ·解决wordpress修改固定链接页面出现404错误问题(2014-06-21)
- ·500错误The server encountered an internal error or misconfigu(2014-11-21)
- ·WordPress上传出现"上传时发生了错误,请稍候再试"解决方法(2015-03-23)
- ·关于wordpress登录页面出现”Cookies因预料之外的错误被阻止”(2015-09-23)
- ·wordpress解决500错误(2015-09-24)
- ·WordPress中文Tags、中文地址404错误解决办法(2015-10-15)
- ·wordpress网站搬家、升级、安装主题或插件后出现HTTP 500错误(2018-11-20)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)