人是朝前走的,軟件也是。

這次 Wordpress 4.4 再度更新了不少東西,但很多東西對我們來説完全無用,或沒有必要。

當然還有一些使用上的問題,也是令人哭笑不得。

很多人發 QQ 給我,問及 WordPress 4.4 的幾個問題,該如何解決。

想想還是把代碼放上來,順帶簡單描述一下問題。

AJAX 評論翻頁後,頁碼導航消失。

這個問題,主要是超出 WP 主循環後,得不到評論總頁數為多少所致。

找到你的 AJAX 加載評論頁面的 PHP 函數,找到類似代碼:

paginate_comments_links(‘current=’ . $pageid . $baseLink . ‘&prev_text=上一頁&next_text=下一頁’);

修改為

$totalPage = ‘&total=’.get_comment_pages_count($comments);
paginate_comments_links(‘current=’ . $pageid . $totalPage . $baseLink . ‘&prev_text=上一頁&next_text=下一頁’);

如此便解決了。

升級到新版本後,樓層號出錯,統計的數量也不對。

這個問題,其實應該説是兩個問題才對。

對於樓層號出錯的,主要是因為 $in_comment_loop 的判斷有問題,新版本使用 wp_list_comments 函數後,傳遞的 $in_comment_loop 都是空,我們需要將評論回調函數中的判斷修改一下即可。大概在評論回調函數找到類似代碼如下:

$page = ( !empty($in_comment_loop) ) ? get_query_var(‘cpage’) : get_page_of_comment( $comment->comment_ID, $args );

修改為

$page = ( get_query_var(‘cpage’) ) ? get_query_var(‘cpage’) : get_page_of_comment( $comment->comment_ID, $args );

即可,評論回調函數的名稱,可以通過找到你使用的 wp_list_comments 函數中的 callback 參數看到。如:

wp_list_comments(‘type=comment&callback=lopercomment&max_depth=10000’);

那麼必有 lopercomment 這個評論回調函數。

當然樓層號還出錯,那就只能再檢查一下回調函數,看哪裏錯了。各家寫法不一,無法一一列舉。

對於統計數量不對,其原因主要是 WP 改變了統計方式,以前是輸出全部評論數,現在只輸出了設置規定的數量 (儀表盤=> 設置=> 討論) 。

而我們大多數代碼偷了個懶,只是單純的 count 評論循環的評論數,當 WP 改變方式後,就錯誤了。

因為各家代碼不同,寫法不同,而且可能主題需要修改多個文件,我就大概講下,找到類似於:

count($comments);

或者

count($comments_by_type[‘comment’]);

等一些計數方法,將其改為

get_comments(array(‘status’ => ‘approve’, ‘post_id’=> $post->ID, ‘count’ => true));

當然,你可以用

get_comments_number($post->ID);

但是都要清除一些其他計數。一般主題都有帶。

如果你想統計 Traceback 或 Pingback 的數量,不建議使用:

count($comments_by_type[‘pings’]);

而是用

get_comments(array(‘status’ => ‘approve’, ‘post_id’=> $post->ID, ‘type’=> ‘pings’, ‘count’ => true));

來獲得計數。

説句實在話,更喜歡通過 sql 來得到計數。方便。或許回頭應該整合下,寫個函數。

圖片已經在設置做了不裁剪,但新版本,還是會自動生成。

這個是因為 WP 新版本,添加了圖片自適應 (響應式),以兼容各種設備。

如果是跟我一樣沒做自適應的,就沒必要去特意裁剪圖片去減小圖片大小,浪費。通過:

add_filter( ‘max_srcset_image_width’, create_function( ”, ‘return 1;’ ) );

可以禁用這一特性。

那些已經做了響應式主題,可以考慮使用這一特性,畢竟在手機端,會自動裁剪為合適大小,以減小圖片大小,加快加載,減少流量。當然,實際用起來怎麼樣,我也不知道。

新版本加載了幾個頭和 js

新版本可以自動識別所有帶 oEmbed(URL) 特性的,可以在文章內嵌入其他 WP 網站。具體體現比如,你在編輯器寫了對方博客的鏈接,如果其博客有聲明支持 oEmbed(URL),那麼會自動轉換成帶樣式的鏈接 (有標題、摘要、評論數、分享按鈕) 。

這一特性怎麼説呢,基本用不上。

禁用這一特性可以使用插件 Disable Embeds,他會禁用掉 js 的加載及自動轉換。

至於 wp-json Link 這個頭,是給 REST API 用的,通過:

remove_action( ‘wp_head’, ‘rest_output_link_wp_head’ );

來去掉。如果實在是不想用 REST API,還可以通過:

add_filter(‘rest_enabled’, ‘_return_false’);

add_filter(‘rest_jsonp_enabled’, ‘_return_false’);

remove_action(‘template_redirect’, ‘rest_output_link_header’);

來禁用。

新版本,發表文章後,圖片沒有燈箱效果

新版本,確實在默認配置,去掉了自動鏈接到附件這一特性 (新版本,「鏈接到」 的默認值是無),這使得附件鏈接不會自動鏈接到媒體文件。也導致燈箱判斷不到 a 標籤 (只有 img 標籤),而無法工作。

通過添加:

update_option(‘image_default_link_type’, ‘file’ );

可以解決,只要執行一次就好。用完就刪掉這段代碼。

偷懶的話,你可以訪問 http://你的博客地址/wp-admin/options.php 進入全部設置,找到 image_default_link_type 這一項,設置為 file,記得保存設置。可以修改的值為 none 、 file 、 post 、 custom,分別代表為無、媒體文件、文章頁面、自定義。

其他問題,暫時沒人問,我也沒發現。

可以提,但儘量自行解決。

祝新年快樂。