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-XXXXXXXXXXXXXXXXXXXXXXXXXspan class="keyword"XXXXXX/spanXXXX/liXXXli class="alt"XXXXXXspan class="keyword"XXXX/spanXXXXXXXXXXXXXXX/liXXXliXXXXXXXXXXXXXXXXXinput name="ludou-se-only" type="checkbox" checked="checked" value="1" /> SEO专用';
  12.   else
  13.     echo '"ludou-se-only" type="checkbox" value="1" /> SEO专用';
  14. }
  15. // 保存选项设置
  16. function ludouseo_save_postdata($post_id) {
  17.   // 验证
  18.   if ( !isset( $_POST['ludou_se_only_nonce']))
  19.     return $post_id;
  20.   $nonce = $_POST['ludou_se_only_nonce'];
  21.   // 验证栏位是否合法
  22.   if (!wp_verify_nonce( $nonce, 'ludou_se_only'))
  23.     return $post_id;
  24.   // 判断是否自动保存
  25.   if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
  26.       return $post_id;
  27.   // 验证用户许可权
  28.   if ('page' == $_POST['post_type']) {
  29.     if ( !current_user_can('edit_page', $post_id))
  30.       return $post_id;
  31.   }
  32.   else {
  33.     if (!current_user_can('edit_post', $post_id))
  34.       return $post_id;
  35.   }
  36.   // 更新设置
  37.   if(!empty($_POST['ludou-se-only']))
  38.     update_post_meta($post_id, 'ludou_se_only', '1');
  39.   else
  40.     delete_post_meta($post_id, 'ludou_se_only');
  41. }
  42. add_action('save_post', 'ludouseo_save_postdata');
  43. function do_ludou_se_only() {
  44.   // 本功能只对文章和页面有效
  45.   if(is_singular()) {
  46.     global $post;
  47.     $is_robots = 0;
  48.     $ludou_se_only = get_post_meta($post->ID, 'ludou_se_only', true);
  49.     if(!empty($ludou_se_only)) {
  50.       // 下面是搜寻引擎判断关键字阵列
  51.       // 有点简单,自己优化一下吧
  52.       $bots = array(
  53.             'spider',
  54.             'bot',
  55.             'crawl',
  56.             'Slurp',
  57.             'yahoo-blogs',
  58.             'Yandex',
  59.             'Yeti',
  60.             'blogsearch',
  61.             'ia_archive',
  62.             'Google'
  63.             );
  64.       $useragent = $_SERVER['HTTP_USER_AGENT'];
  65.       if(!empty($useragent)) {
  66.         foreach ($bots as $lookfor) {
  67.           if (stristr($useragent, $lookfor) !== false) {
  68.             $is_robots = 1;
  69.             break;
  70.           }
  71.         }
  72.       }
  73.       // 如果不是搜寻引擎,就显示错误资讯
  74.       // 已登入的用户不受影响
  75.       if(!$is_robots && !is_user_logged_in()) {
  76.         wp_die('您无权查看此文!');
  77.       }
  78.     }
  79.   }
  80. }
  81. 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="/zh-CN/, 'href="'.get_option('home').'/?r=', $text);$text=str_replace("href= '", "href='/zh-CN/.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(); ?>完成
 

禁用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="/zh-CN/http.*?)"/',$content,$matches); if($matches){ foreach($matches[1] as $val){ if( strpos($val,home_url ())===false ) $content=str_replace("href="/zh-CN/val"", "rel="nofollow" href="/zh-CN/" . 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[^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 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]