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

这次 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,分别代表为无、媒体文件、文章页面、自定义。

其他问题,暂时没人问,我也没发现。

可以提,但尽量自行解决。

祝新年快乐。