WordPress 4.4的一些变更的修改

提醒:本文最后更新于 3263 天前,文中所描述的信息可能已发生改变,请仔细核实。

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

这次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=下一页');

如此便解决了。


第二个问题:升级到新版本后,楼层号出错,统计的数量也不对。

答:这个问题,其实应该说是两个问题才对。

1.对于楼层号出错的,主要是因为$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这个评论回调函数。

当然楼层号还出错,那就只能再检查一下回调函数,看哪里错了。各家写法不一,无法一一列举。

2.对于统计数量不对,其原因主要是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(比如我是https://kn007.net/wp-admin/options.php),进入全部设置,找到image_default_link_type这一项,设置为file,记得保存设置。可以修改的值为none、file、post、custom,分别代表为无、媒体文件、文章页面、自定义。


第六个问题,新版本,评论时候,评论表单在评论框下面,而不是之前的在上面。

答:WP做出这个改变,可能是为了方便填过表单朋友,可以提前看到评论框。但一般我们大部分主题,对评论过填过表单的,都会自动收缩表单。而且最重要的是习惯被改变了,感觉不好。

恢复的话很简单,添加如下代码就行了。

function recover_comment_fields($comment_fields){
    $comment = array_shift($comment_fields);
    $comment_fields =  array_merge($comment_fields ,array('comment' => $comment));
    return $comment_fields;
}
add_filter('comment_form_fields','recover_comment_fields');

此问题来自大发。


第七个问题,更新至4.4.1后,评论翻页又异常了,翻页后读取出来的评论,变成全局评论,也没有了翻页。

答:只想弃用WP了,越搞越废。这个问题的解决办法是由我们的牧风同学研究WP核心代码后得出的。

找到你的AJAX评论翻页代码,找到

$wp_query->is_singular = true;

把它放于wp_list_comments之后即可解决,我晕。

因为只有当is_singular=false,wp_list_comments传入的评论才可用,但是后面的paginate_comments_links又必须is_singular=true 才行,所以你懂的。。。。。。

再这样更新下去,是不是每次都要学习一次WP核心代码。。。


其他问题,暂时没人问,我也没发现。。。有的话会补充进来。

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

祝元旦快乐。

转载请注明转自:kn007的个人博客的《WordPress 4.4的一些变更的修改