WordPress代碼教學

用代碼限制WordPress文章摘要的長度,且自訂摘要後面的[…]

一般而言,一些主題無法控制文章摘要。
就會變成這樣子用代碼限制WordPress文章摘要的長度,且自訂摘要後面的[…]
開啟主題的functions.php使用這個代碼後
 
  1. //用代碼限制WordPress文章摘要的長度,且自訂摘要後面的[…]
  2.     #限制WordPress摘要長度
  3.     function junzibuqi_com_excerpt_length() {
  4.     #160為摘要長度,可以根據自己需要修改。
  5.             return 160;
  6.     }
  7.     add_filter( 'excerpt_length', 'junzibuqi_com_excerpt_length', 999 );
  8.     function junzibuqi_com_more() {
  9.     #這樣就直接將WordPress摘要的省略號[……]替換成了閱讀閱讀全文。
  10.     return '"' . esc_url(get_permalink()) . '" class="gengduo">' . ' →[ 閱讀全文 ] ← ';
  11.     }
  12.     add_filter('excerpt_more', 'junzibuqi_com_more');
用代碼限制WordPress文章摘要的長度,且自訂摘要後面的[…]

代碼讓wordpress媒體庫只能上傳圖片格式

wordpress的媒體庫現在支援很多上傳的格式。
但是我們如果只希望媒體庫,僅接受圖片格式。
我們可以用很簡單的代碼實現這點。
開啟主題的functions.php加入以下代碼就可以囉
 
  1. // 讓wordpress媒體庫只能上傳圖片格式
  2. add_filter('upload_mimes', 'custom_upload_mimes');
  3. function custom_upload_mimes( $existing_mimes=array() ) {
  4.   $existing_mimes = array('jpg|jpeg|jpe' => 'image/jpeg',
  5.     'gif' => 'image/gif',
  6.     'png' => 'image/png',
  7.     'bmp' => 'image/bmp',
  8.     'tif|tiff' => 'image/tiff',
  9.     'ico' => 'image/x-icon');
  10.   return $existing_mimes;
  11. }

所有文章

用代碼讓WordPress的某些文章只給搜尋引擎看

如果你想讓某些文章是為了SEO而寫的。
讓搜尋引擎抓爬的,不讓其他人閱讀。
那你可以使用以下代碼,放入主題的functions.php
就會出現這個圖片,勾選之後就ok囉
  1. // 用代碼讓WordPress的某些文章只給搜尋引擎看
  2. function ludouseo_add_custom_box() {
  3.   add_meta_box('ludou_se_only', '搜尋引擎專屬', 'ludou_se_only', 'post', 'side', 'low');
  4.   add_meta_box('ludou_se_only', '搜尋引擎專屬', 'ludou_se_only', 'page', 'side', 'low');
  5. }
  6. add_action('add_meta_boxes', 'ludouseo_add_custom_box');
  7. function ludou_se_only() {
  8.   global $post;
  9.   //加入驗證欄位
  10.   wp_nonce_field('ludou_se_only', 'ludou_se_only_nonce');
  11.   $meta_value = get_post_meta($post->ID, 'ludou_se_only', true);
  12.   if($meta_value)
  13.     echo '"ludou-se-only" type="checkbox" checked="checked" value="1" /> SEO專用';
  14.   else
  15.     echo '"ludou-se-only" type="checkbox" value="1" /> SEO專用';
  16. }
  17. // 保存選項設置
  18. function ludouseo_save_postdata($post_id) {
  19.   // 驗證
  20.   if ( !isset( $_POST['ludou_se_only_nonce']))
  21.     return $post_id;
  22.   $nonce = $_POST['ludou_se_only_nonce'];
  23.   // 驗證欄位是否合法
  24.   if (!wp_verify_nonce( $nonce, 'ludou_se_only'))
  25.     return $post_id;
  26.   // 判斷是否自動保存
  27.   if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
  28.       return $post_id;
  29.   // 驗證用戶許可權
  30.   if ('page' == $_POST['post_type']) {
  31.     if ( !current_user_can('edit_page', $post_id))
  32.       return $post_id;
  33.   }
  34.   else {
  35.     if (!current_user_can('edit_post', $post_id))
  36.       return $post_id;
  37.   }
  38.   // 更新設置
  39.   if(!empty($_POST['ludou-se-only']))
  40.     update_post_meta($post_id, 'ludou_se_only', '1');
  41.   else
  42.     delete_post_meta($post_id, 'ludou_se_only');
  43. }
  44. add_action('save_post', 'ludouseo_save_postdata');
  45. function do_ludou_se_only() {
  46.   // 本功能只對文章和頁面有效
  47.   if(is_singular()) {
  48.     global $post;
  49.     $is_robots = 0;
  50.     $ludou_se_only = get_post_meta($post->ID, 'ludou_se_only', true);
  51.     if(!empty($ludou_se_only)) {
  52.       // 下面是搜尋引擎判斷關鍵字陣列
  53.       // 有點簡單,自己優化一下吧
  54.       $bots = array(
  55.             'spider',
  56.             'bot',
  57.             'crawl',
  58.             'Slurp',
  59.             'yahoo-blogs',
  60.             'Yandex',
  61.             'Yeti',
  62.             'blogsearch',
  63.             'ia_archive',
  64.             'Google'
  65.             );
  66.       $useragent = $_SERVER['HTTP_USER_AGENT'];
  67.       if(!empty($useragent)) {
  68.         foreach ($bots as $lookfor) {
  69.           if (stristr($useragent, $lookfor) !== false) {
  70.             $is_robots = 1;
  71.             break;
  72.           }
  73.         }
  74.       }
  75.       // 如果不是搜尋引擎,就顯示錯誤資訊
  76.       // 已登入的用戶不受影響
  77.       if(!$is_robots && !is_user_logged_in()) {
  78.         wp_die('您無權查看此文!');
  79.       }
  80.     }
  81.   }
  82. }
  83. add_action('wp', 'do_ludou_se_only');
已經登入的會員,是可以看到的喔!

wordpress如何修改虛擬主機的PHP的memory_limit?

我們使用wordpress最小記憶體memory_limit是32M
有很多種可以修改memory_limit的方法
但通常有幾個注意的地方。
如果你是租用虛擬主機,你可以直接請他們幫你做修改。
通常如果他們不願意幫你做修改。
你可以自己修改看看,假如透過以下方法
用.htaccess 來修改memory_limit wordpress方法
這是最好的方法,也是最有效果的方法
因為一般人會說用php.ini來修改
可是這很困難的,一般來講你若是租用虛擬主機,他們很難開放這個php.ini讓你來修改。
我們可以先在根目錄建立一個view-php-info.php檔案
裡面增加這段

[cc lang="php"]

[/cc]

http://你的網址/view-php-info.php
搜尋memory_limit就可以知道你目前的數值是多少
我們可以用.htaccess 來控制php.ini的數值。
當然最壞的可能,他們也控制了.htaccess
讓你使用這段代碼,放入.htaccess 依然無效。

[cc lang="php"] php_value memory_limit 128M [/cc]

那以下的方法,更不會有效果了
修改wordpress的wp-config.php
在裡面增加
  1. // 正常網頁的記憶體用量上限值   
  2. define( 'WP_MEMORY_LIMIT', '1600M' );   
  3. // 管理介面的記憶體用量上限值   
  4. define( 'WP_MAX_MEMORY_LIMIT', '1600M' );  
在第四行、和第六行可以做數值的修改。

用.htaccess讓wordpress設定瀏覽器快取功能(Expires headers)

這是優化wordpress一個很重要的作法。
設定瀏覽器快取功能(Expires headers),意思就是給你css,js,圖片等文件,設定一個期限。
這什麼意思呢?
利用「遊覽器緩存」配合「你網站的Expires headers(設定過期日期)」
有人第一次到你的網站,會下載所有的內容在他的遊覽器。
當你沒有設定一個「期限」
這個人又來你的網站,遊覽器又會比對這些資料。
如果有一個期限,可以讓遊覽器不需要比對這些資料。
加快了你網站速度。
如何檢測此功能?
使用https://developers.google.com/speed/pagespeed/insights/
檢查「使用瀏覽器快取功能」就可以知道,
具體做法
打開你網站根目錄的.htaccess 貼入以下代碼
 [cc lang="php"] ExpiresActive on ExpiresDefault "access plus 1 month" # CSS ExpiresByType text/css "access plus 1 year" # Data interchange ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" # Favicon (cannot be renamed!) ExpiresByType image/x-icon "access plus 1 week" # HTML components (HTCs) ExpiresByType text/x-component "access plus 1 month" # HTML ExpiresByType text/html "access plus 0 seconds" # JavaScript ExpiresByType application/javascript "access plus 1 year" # Manifest files ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" ExpiresByType text/cache-manifest "access plus 0 seconds" # Media ExpiresByType audio/ogg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # Web feeds ExpiresByType application/atom+xml "access plus 1 hour" ExpiresByType application/rss+xml "access plus 1 hour" # Web fonts ExpiresByType application/font-woff2 "access plus 1 month" ExpiresByType application/font-woff "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" [/cc]

讓wordpress有www的網域,變成無www的網域

有時候你安裝了wordpress,某些因素。
導致你的網域必須要輸入www.你的網域。
那麼可以透過那麼可以透過.htaccess的控制
使不輸入www就能跳轉到你的網域
開啟你根目錄的.htaccess加入此代碼
  [cc lang="php"] RewriteEngine On RewriteCond %{HTTP_HOST} ^www.googlo.me$ [NC] RewriteRule ^(.*)$ http://googlo.me/$1 [L,R=301] [/cc]

用代碼讓wordpress媒體庫有獨立分類

一般來講,媒體庫沒有分類,其實挺亂的。
而且有時候若是按文章分類,文章若很多,真是眼花撩亂。
現在我們有一個很好的代碼,解決這個問題。
開啟你主題的functions.php加入以下代碼
[cc lang="php"] //讓媒體庫也有獨立分類 function ludou_create_media_category() { $args = array( 'label' => '媒體分類', 'hierarchical' => true, 'show_admin_column' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, ); register_taxonomy( 'attachment_category', 'attachment', $args ); } add_action( 'init', 'ludou_create_media_category' ); [/cc]

wordpress新手要了解後台,設定,裡面的參數

其實很多用wordpress的人,總是會忽略wordpress本身的參數設定
其實在後台裡面設定,有很多地方我們可以去留意的
像在「設定>>一般
可以設定網站標題,網誌描述,是否開放註冊等重要
設定>>固定網址
可以選擇文章標題,強化seo等等
設定>>討論
這邊可以選擇文章發表後,過多少天禁止留言評論
或者當有人發表留言評論,可以通知作者
其實有蠻多功能,可以一一去了解,那就可以省下很多解決問題的方式

用代碼讓wordpress的某部分內容,是只有註冊/登入的人才可以看到

如果你想要讓wordpress的某部分內容,是只有註冊/登入的人才可以看到。
那你可以使用這段代碼。
開啟主題的functions.php加入以下代碼
 [cc lang="php"] //用代碼讓wordpress的某部分內容,是只有註冊/登入的人才可以看到 add_shortcode( 'members', 'member_check_shortcode' ); function member_check_shortcode( $atts, $content = null ) { if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) return $content; return ''; } [/cc]
具體調用方式。
在發佈文章內容的時候,切換文字編輯模式,要註冊/登入者可看的短碼
[cc lang="php"] [members]你好,僅有註冊/登入會員可以看到[/members] [/cc] [members]你好,僅有註冊/登入會員可以看到[/members]

用代碼讓wordpress發表新文章,通知註冊會員

現在很多人會想建構開放註冊的會員網站。
更希望你網站有發表新文章的時候,可以「自動通知用戶」
那麼這是一個很好的代碼。
打開主題的functions.php,加入以下代碼就可以囉!
當你wordpress網站有發表新文章,就會自動以e-mail通知用戶囉!
 
[cc lang="php"] //用代碼讓wordpress發表新文章,通知註冊會員 function newPostNotify($post_ID) { if( wp_is_post_revision($post_ID) ) return; global $wpdb; $get_post_info = get_post($post_ID); if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) { // 讀取資料庫,取得所有用戶的email $wp_user_email = $wpdb->get_results("SELECT DISTINCT user_email FROM $wpdb->users"); foreach ( $wp_user_email as $email ) { // 信箱標題 $subject = '真正用wordpress網路賺錢,有新訊息喔'; // 信箱內容 $message = '標題:' . get_permalink($post_ID); // 寄發信箱 wp_mail($email->user_email, $subject, $message); } } } // 一旦WordPress有新文章發佈或文章被修改即刻執行newPostNotify函數 add_action('publish_post', 'newPostNotify'); [/cc]
 

用代碼重寫wordpress留言評論者的連結網址

seo沒有很複雜,基本上很簡單。
只是有一些小要點要留意。
就是當留言評論的內容,含有網址或連結時,容易讓「搜尋引擎」的重心,轉向外部連結。
因此我們可以用代碼改變評論留言裡面的內容。
變成這樣http://dhamma.com.tw/?r=http://amitabhabuddhaya.com.tw/
具體做法,開啟主題的functions.php貼入以下代碼
 [cc lang="php"] //用代碼重寫wordpress留言評論者的連結網址 add_filter('get_comment_author_link', 'add_redirect_comment_link', 5); add_filter('comment_text', 'add_redirect_comment_link', 99); function add_redirect_comment_link($text = ''){ $text=str_replace('href="', 'href="'.get_option('home').'/?r=', $text); $text=str_replace("href='", "href='".get_option('home')."/?r=", $text); return $text; } add_action('init', 'redirect_comment_link'); function redirect_comment_link(){ $redirect = $_GET['r']; $host = $_SERVER['HTTP_HOST']; if($redirect){ if(strpos($_SERVER['HTTP_REFERER'],get_option('home')) !== false){ header("Location: $redirect#form:$host"); exit; } else { header("Location: $redirect#form:$host"); exit; } } } //讓留言評論網址或連結加入nofollow屬性 add_filter('comment_text', 'auto_nofollow'); function auto_nofollow($content) { //return stripslashes(wp_rel_nofollow($content)); return preg_replace_callback('/]+/', 'auto_nofollow_callback', $content); } function auto_nofollow_callback($matches) { $link = $matches[0]; $site_link = get_bloginfo('url'); if (strpos($link, 'rel') === false) { $link = preg_replace("%(href=S(?!$site_link))%i", 'rel="nofollow" $1', $link); } elseif (preg_match("%href=S(?!$site_link)%i", $link)) { $link = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $link); } return $link; } [/cc]

WordPress文章或頁面自動生成二維碼(生成條碼)

這個作法非常的簡單喔!
只要將以下的API原碼,貼在適當的位置就可以囉!
舉例,像若你想在每一天文篇的下面增加二維碼
那你就打開主題的single.php
貼在
[cc lang="php"] [/cc] 後面 [cc lang="php"] <?php the_title(); ?> [/cc]
就像這樣子
<?php the_title(); ?>完成
 

禁用WordPress資源的版本查詢,實現WordPress的優化

我們一個網站,通常會出現一些版本號。這是可以隱藏的
像下圖,當你搜尋ver的時候會找到像這樣的
http://dhamma.com.tw/wp-content/themes/a/bootstrap/css/bootstrap.min.css?ver=9.4.8
20150926-1
假如你的css或js檔案不常更換的話,一般來講是很少更換,或是不會更換的
那你就用以下代碼放入主題的functions.php
就可以解決css或js版本號一直出現問題
 [cc lang="php"] //禁用WordPress資源的版本查詢,實現WordPress的優化 /** Remove Query strings from Static Resources. */ function _remove_script_version( $src ){ $parts = explode( '?', $src ); return $parts[0]; } add_filter( 'script_loader_src', '_remove_script_version', 15, 1 ); add_filter( 'style_loader_src', '_remove_script_version', 15, 1 ); [/cc] 如下圖

用代碼將WordPress文章中的連結自動轉成內部連結,大幅提昇wordpress的搜尋優化

當搜尋引擎要收錄你網站的訊息時。
範例
大自然整體淨化道場
發現你網站裡面有很多外部連結,連結到別人的網站。
那是十分不利的作法。會流失自己的權力。
那也許外掛可以把外部連結轉成內連,但是外掛不是一個很好的作法。
開啟functions.php貼入以下代碼
[cc lang="php"] //用代碼將WordPress文章中的連結自動轉成內部連結,大幅提昇wordpress的搜尋優化 add_filter('the_content','web589_the_content_nofollow',999); function web589_the_content_nofollow($content){ preg_match_all('/href="(http.*?)"/',$content,$matches); if($matches){ foreach($matches[1] as $val){ if( strpos($val,home_url())===false ) $content=str_replace("href="$val"", "rel="nofollow" href="/" . get_bloginfo('wpurl'). "/link?url=" .base64_encode($val). """,$content); } } return $content; } [/cc]
ok,接著在網站根目錄,注意,不是主題目錄
網站根目錄新建一個「link」資料夾
在「link」裡面建立「 index.php 」(要編譯成UTF-8碼-檔首無ROM
在裡面加入以下內容
[cc lang="php"] 正在載入中.... [/cc]
這樣就完成囉!記得將網址改成你的網址就可以

用代碼為wordpress頁面及文章的連結自動加上nofollow,優化wordpress的seo

之前我們有一篇wordpress的文章連結,加入nofollow屬性
現在我們也要讓頁面具有這樣的功能!
可以將代碼貼入主題的functions.php
[cc lang="php"] //用代碼為wordpress頁面及文章的連結自動加上nofollow,優化wordpress的seo add_filter( 'the_content', 'cn_nf_url_parse'); function cn_nf_url_parse( $content ) { $regexp = "]*href=("??)([^" >]*?)\1[^>]*>"; if(preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if( !empty($matches) ) { $srcUrl = get_option('siteurl'); for ($i=0; $i < count($matches); $i++) { $tag = $matches[$i][0]; $tag2 = $matches[$i][0]; $url = $matches[$i][0]; $noFollow = ''; $pattern = '/targets*=s*"s*_blanks*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' target="_blank" '; $pattern = '/rels*=s*"s*[n|d]ofollows*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' rel="nofollow" '; $pos = strpos($url,$srcUrl); if ($pos === false) { $tag = rtrim ($tag,'>'); $tag .= $noFollow.'>'; $content = str_replace($tag2,$tag,$content); } } } } $content = str_replace(']]>', ']]>', $content); return $content; } [/cc]

隱藏wordpress後台部分外掛的代碼!

這是一篇很棒的教學!
畢竟wordpress的外掛有非常多種。
假如你並不希望你後台的外掛被人看到。
那使用這個代碼就可以隱藏囉!
在你的主題function.php加入以下代碼

 

如何刪除 WordPress 一級選單

將此部分粘貼到您的代碼片段插件中。注意代碼中的註釋,因為這會告訴你代碼的哪一部分刪除了什麼。所以,如果你想刪除帖子菜單,那麼只需取消註釋並離開這部分。

 


  1. function hide_menu() {   
  2.   
  3.      /* 控制台 */  
  4.      // remove_menu_page( 'index.php' ); // 控制台 + submenus   
  5.      // remove_menu_page( 'about.php' ); // WordPress 選單   
  6.      remove_submenu_page( 'index.php', 'update-core.php');  // 更新    
  7.   
  8.      /* 刪除默認選單 */  
  9.      remove_menu_page( 'edit-comments.php' ); // 評論   
  10.      remove_menu_page( 'tools.php' ); //工具   
  11.      remove_menu_page( 'users.php' ); //用戶   
  12.   
  13. }   
  14. add_action('admin_head', 'hide_menu');  
您需要刪除任何與外掛相關的選單,先這樣複製路

怎麼看路徑?

那麼完整的 URL 是 https://yoursite.com/wp-admin/admin.php?page=elementor

抓住最後一部分“elementor”並將其添加到代碼中

如下所示:
  1. remove_menu_page( 'elementor' );    
這樣就完成隱藏囉!

用代碼讓WordPress刪除文章時,把媒體庫圖片和縮略圖一起刪除

我們要將一篇文章刪除時,希望可以刪除比較徹底。
那麼媒體庫裡面的圖片、以及自動生成的縮圖。可以一起刪除
可以用以下代碼,開啟主題的functions.php
[cc lang="php"] //用代碼讓WordPress刪除文章時,把媒體庫圖片和縮略圖一起刪除 function delete_post_and_attachments($post_ID) { global $wpdb; //删除特色图片 $thumbnails = $wpdb->get_results( “SELECT * FROM $wpdb->postmeta WHERE meta_key = ‘_thumbnail_id’ AND post_id = $post_ID” ); foreach ( $thumbnails as $thumbnail ) { wp_delete_attachment( $thumbnail->meta_value, true ); } //删除图片附件 $attachments = $wpdb->get_results( “SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = ‘attachment'” ); foreach ( $attachments as $attachment ) { wp_delete_attachment( $attachment->ID, true ); } $wpdb->query( “DELETE FROM $wpdb->postmeta WHERE meta_key = ‘_thumbnail_id’ AND post_id = $post_ID” ); } add_action(‘before_delete_post’, ‘delete_post_and_attachments’); [/cc]