国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > Wordpress > 正文

WordPress統(tǒng)計(jì)當(dāng)前日志中所有的附件錯(cuò)誤怎么解決

2024-09-07 00:51:04
字體:
供稿:網(wǎng)友

今天發(fā)現(xiàn)wordpress博客自帶的統(tǒng)計(jì)當(dāng)前日志中所有的附件有問題,并不能正確的統(tǒng)計(jì)出來,后來經(jīng)過反復(fù)調(diào)整最后是可以了,下面我把具體的方法與各位分享.

在這里稍微分析下原理:無論是wordpress什么版本,原理都是一樣的,都是通過這段核心代碼進(jìn)行查詢.

  1. $args = array
  2.     'post_parent' => $post->ID, 
  3.     'post_type' => 'attachment'
  4.     'post_mime_type' => 'image'
  5.     'posts_per_page' => -1, 
  6.     'orderby' => 'menu_order'
  7.     'order' => 'ASC'
  8. ); 
  9. $attachments = get_posts( $args ); 

不過呢,wordpress在3.6以后呢,為大家封裝了一個(gè)方法get_attached_media,至此以后查詢就變得類似像下面一樣簡單了.

  1. // 獲取所有類型附件 
  2. $attachments = get_attached_media( ''$post->ID ); 
  3. // 獲取所有的音頻附件: 
  4. $attachments = get_attached_media( 'audio'$post->ID ); 

這樣就OK了嗎?大家可以做一個(gè)這樣的測試:先在一篇日志中插入5張圖,保存,然后從這幾張圖中,隨便刪除2張,修改,保存(這個(gè)時(shí)候日志中只有3張圖了),最后用這個(gè)函數(shù)再來看,輸出還是5個(gè)post數(shù)據(jù).

為什么會(huì)這樣?

這段代碼是通過查詢wp_posts表中所有post_parents字段為post_ID,并且post_type為attachment的數(shù)據(jù),這樣就會(huì)造成兩個(gè)問題.

只統(tǒng)計(jì)插入的圖片,不統(tǒng)計(jì)刪除的圖片,post_parents的字段類型為BIGINT,這樣只能統(tǒng)計(jì)一次,比如你在日志A插入了圖片I,之后在日志B中再插入圖片I,這樣就沒辦法同時(shí)統(tǒng)計(jì)了.這樣看來wordpress統(tǒng)計(jì)當(dāng)前日志附件相當(dāng)不準(zhǔn).

我是如何修正的,我思考了這么幾個(gè)問題?用什么來記錄當(dāng)前日志的附件?在什么地方進(jìn)行統(tǒng)計(jì),該如何取出,關(guān)于記錄日志的附件,我選擇了postmeta這個(gè)表來記錄,增加一個(gè)meta_key,至于在什么地方統(tǒng)計(jì),我選擇了鉤子save_post,整體代碼如下:

  1. add_action('save_post''save_post_my_func', 10 , 2); 
  2.  
  3. function save_post_my_func() { 
  4.     global $wpdb
  5.  
  6.     $content = $post->post_content; 
  7.     if (!stristr($content'/wp-content/uploads/')) 
  8.     { 
  9.         // 如果說當(dāng)前日志中沒有任何附件鏈接,我將這個(gè)字段更新為空 
  10.         update_post_meta($post_id'_wp_post_attach_total_'''); 
  11.         return ; 
  12.     } 
  13.  
  14.     $data = array(); 
  15.     if (preg_match_all('/(href|src)=[^>]+/wp-content/uploads/(sites/d+/)?([^"'>s]+)["'>s]/is'$content$match)) 
  16.     { 
  17.         // 統(tǒng)計(jì)所有帶有附件鏈接的img還有l(wèi)ink 
  18.         $files = array_flip(array_flip($match[3])); 
  19.         $sql = sprintf("SELECT `post_id` FROM `%s` WHERE `meta_key`='_wp_attached_file' AND (`meta_value`='%s');"
  20.                         $wpdb->postmeta, implode("' OR `meta_value`='"$files)); 
  21.  
  22.         (FALSE != ($row = $wpdb->get_col($sql))) && $data = $row
  23.     } 
  24.  
  25.     // 統(tǒng)計(jì)日志中的相冊 
  26.     if (preg_match_all('/?)([^"']]*)1s*]/is', $content$gallery)) 
  27.     { 
  28.         $where = array(); 
  29.         $gallery = explode(',', implode(','$gallery[2])); 
  30.         foreach ($gallery as $val
  31.         { 
  32.             $where[] = '`post_id`='.trim($val); 
  33.         } 
  34.  
  35.         $sql = sprintf("SELECT `post_id` FROM `%s` WHERE `meta_key`='_wp_attached_file' AND (%s);"$wpdb->postmeta, implode(' OR '$where)); 
  36.         (FALSE != ($row = $wpdb->get_col($sql))) && $data = array_merge($data$gallery); 
  37.     } 
  38.  
  39.     // 統(tǒng)計(jì)當(dāng)前日志中的縮略圖 
  40.     if (FALSE != ($thumb_id = get_post_meta($post_id'_thumbnail_id'))) 
  41.     { 
  42.         $data[] = $thumb_id[0]; 
  43.     } 
  44.  
  45.     // 為了后續(xù)擴(kuò)展,以及向其他應(yīng)用開放擴(kuò)展,這里我創(chuàng)建了一個(gè)過濾鉤子 
  46.     $data = apply_filters('wp_post_attach_total'$data$post_id); 
  47.     if (!emptyempty($data)) 
  48.     { 
  49.         $data = array_flip(array_flip($data)); 
  50.         update_post_meta($post_id'_wp_post_attach_total_', implode(','$data)); 
  51.     } 

大家可以通過下面的代碼獲取當(dāng)前日志附件,代碼如下

get_post_meta($post_id, '_wp_post_attach_total_');

為什么要做這樣的研究,初衷原本是要統(tǒng)計(jì)wordpress有多少附件是上傳后卻用不到的,卻發(fā)現(xiàn)wordpress提供的功能卻有問題。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文昌市| 黔西| 桐城市| 孙吴县| 琼结县| 黄骅市| 华宁县| 杭锦旗| 阿勒泰市| 壤塘县| 吴桥县| 南昌县| 灵台县| 克拉玛依市| 佛学| 黑水县| 呼伦贝尔市| 延寿县| 吉林省| 泾阳县| 镇江市| 普兰店市| 栾川县| 周至县| 甘南县| 灌云县| 建始县| 宜兰县| 玉龙| 富源县| 丽水市| 定襄县| 神池县| 嘉义市| 文登市| 栾城县| 方城县| 陕西省| 宁河县| 靖边县| 安顺市|