VS Code必要插件(php、typescript)

1.括号高亮

Bracket Pair Colorizer     

2.中文语言包

Chinese (Simplified) Language Pack for Visual Studio Code    

3.Eclipse快捷键

Eclipse Keymap    

4.JavaScript语法检测

ESLint   

5.主题

One Dark Pro    

6.路径提示

Path Intellisense

7.php debug调试

PHP Debug

8.php 格式化

PHP Formatter

9.php 类、函数提示

PHP IntelliSense

10.TS语法检测

TSLint

11.文件图标

vscode-icons

 

 

User Settings配置
{
“editor.formatOnType”: false,
“editor.formatOnSave”: false,
“workbench.colorTheme”: “One Dark Pro”,
//打印日志信息,用于调试
“phpformatter.logging”: true,
//不使用composer方式
“phpformatter.composer”: false,
//添加自定义参数,默认的参数level已经在新版本中移出所以会导致运行出错
//RULES=[@PSR1,@PSR2,@Symfony]
//source:https://github.com/FriendsOfPHP/PHP-CS-Fixer#usage
“phpformatter.arguments”: [“–rules=@PSR2”],
// Should point to php-cs-fixer.phar file, if you have installed this manually (without Composer). Should include .phar extension.
// php-cs-fixer.phar路径,使用composer方式时可以不填
“phpformatter.pharPath”: “D:/phpStudy/PHPTutorial/php/php-cs-fixer-v2.phar”,
// If the pharPath is set, and you are not using Composer, and you haven’t added PHP to your PATH, this should point to the php.exe file.
// php路径,使用composer方式时可以不填
“phpformatter.phpPath”: “D:/phpStudy/PHPTutorial/php/php-7.0.12-nts/php.exe”,
“explorer.confirmDelete”: false,
“workbench.activityBar.visible”: true,
“workbench.iconTheme”: “vscode-icons”,
“terminal.integrated.shell.windows”: “C:\\Program Files\\Git\\bin\\bash.exe”
}

SublimeText常用插件

Sublime添加Eclipse快捷键汇总

Preferences -> Key bindings – User

*注意:是 Key bindings – User

如果部分失效请检查是否与其它软件快捷键冲突,如ctrl+shift+f和输入法快捷键!

[
{ “keys”: [“shift+enter”], “command”: “run_macro_file”, “args”: {“file”: “Packages/Default/Add Line.sublime-macro”} },
{ “keys”: [“alt+/”], “command”: “auto_complete” },//自动提示
{ “keys”: [“alt+up”], “command”: “swap_line_up” },//整行上移
{ “keys”: [“alt+down”], “command”: “swap_line_down” },//整行下移
{ “keys”: [“alt+left”], “command”: “jump_back” },//跳转到上一个编辑处
{ “keys”: [“alt+right”], “command”: “jump_forward” },
{ “keys”: [“ctrl+alt+j”], “command”: “join_lines” },
{ “keys”: [“ctrl+d”], “command”: “run_macro_file”, “args”: {“file”: “Packages/Default/Delete Line.sublime-macro”} },//整行删除
{ “keys”: [“ctrl+h”], “command”: “show_panel”, “args”: {“panel”: //搜索全文
“find_in_files”} },
{ “keys”: [“ctrl+l”], “command”: “show_overlay”, “args”: {“overlay”: “goto”, “text”: “:”} },
{ “keys”: [“ctrl+o”], “command”: “show_overlay”, “args”: {“overlay”: //跳转到当前的某个方法
“goto”, “text”: “@”} },
{ “keys”: [“ctrl+up”], “command”: “goto_definition” },//跳转到定义,比如在某个函数上按此键,则跳转到它的定义。
{ “keys”: [“ctrl+down”], “command”: “find_under_prev” },//选中光标所在的变量或者函数,非常有用
{ “keys”: [“ctrl+alt+down”], “command”: “duplicate_line” },//向下复制整行
{“keys”: [“ctrl+shift+f”], “command”: “reindent” , “args”:{“single_line”: //格式化代码,当然也可以利用html+css+js prettify插件来格式化
false}},
{ “keys”: [“ctrl+shift+r”], “command”: “show_overlay”, “args”: {“overlay”: “goto”, “show_files”: true} },
{ “keys”: [“ctrl+shift+s”], “command”: “save_all” },
{ “keys”: [“ctrl+shift+f4”], “command”: “close_all” },
{ “keys”: [“ctrl+shift+y”], “command”: “lower_case” },
{ “keys”: [“ctrl+shift+x”], “command”: “upper_case” }
]

安装Sublime Packages Control

Sublime3

import urllib.request,os,hashlib; h = ‘6f4c264a24d933ce70df5dedcf1dcaee’ + ‘ebe013ee18cced0ef93d5f746d80ef60’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( ‘http://packagecontrol.io/’ + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h)) if dh != h else open(os.path.join( ipp, pf), ‘wb’ ).write(by)

Sublime2

import urllib2,os,hashlib; h = ‘6f4c264a24d933ce70df5dedcf1dcaee’ + ‘ebe013ee18cced0ef93d5f746d80ef60’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( ‘http://packagecontrol.io/’ + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), ‘wb’ ).write(by) if dh == h else None; print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h) if dh != h else ‘Please restart Sublime Text to finish installation’)

安装SublimeLinter

打开 SublimeLinter 的配置文件,Preferences->Package Settings->SublimeLinter->Settings – User,进行如下配置

1. 运行模式

“sublimelinter”“save-only”,

SublimeLinter 的运行模式,总共有四种,含义分别如下:
true – 在用户输入时在后台进行即时校验;
false – 只有在初始化的时候才进行校验;
“load-save” – 当文件加载和保存的时候进行校验;
“save-only” – 当文件被保存的时候进行校验;
推荐设置为 “save-only”,这样只在编写完代码,保存的时候才校验,Sublime Text 运行会更加流畅。

校验引擎
“sublimelinter_executable_map”:
{
“php”“C:\\xampp\\php\\php.exe”  // windows下要使用\\
}

完整配置:

{
“user”: {
“debug”: false,
“delay”: 0.25,
“error_color”: “D02000”,
“gutter_theme”: “Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme”,
“gutter_theme_excludes”: [],
“lint_mode”: “background”,
“linters”: {
“php”: {
“@disable”: false,
“args”: [],
“excludes”: []
},
“phpcs”: {
“@disable”: false,
“args”: [],
“excludes”: [],
“standard”: “PSR2”
}
},
“mark_style”: “outline”,
“no_column_highlights_line”: false,
“passive_warnings”: false,
“paths”: {
“linux”: [],
“osx”: [],
“windows”: [
“D:\\phpStudy\\php\\php-5.6.27-nts”
]
},
“python_paths”: {
“linux”: [],
“osx”: [],
“windows”: []
},
“rc_search_limit”: 3,
“shell_timeout”: 10,
“show_errors_on_save”: false,
“show_marks_in_minimap”: true,
“sublimelinter”: “true”,
“sublimelinter_executable_map”: {
“php”: “D:\\phpStudy\\php\\php-5.6.27-nts\\php.exe”
},
“syntax_map”: {
“html (django)”: “html”,
“html (rails)”: “html”,
“html 5”: “html”,
“javascript (babel)”: “javascript”,
“magicpython”: “python”,
“php”: “html”,
“python django”: “python”,
“pythonimproved”: “python”
},
“tooltip_fontsize”: “1rem”,
“tooltip_theme”: “Packages/SublimeLinter/tooltip-themes/Default/Default.tooltip-theme”,
“tooltip_theme_excludes”: [],
“tooltips”: false,
“warning_color”: “DDB700”,
“wrap_find”: true
}
}

保存后你就能看到它在工作了。

安装ctags

打开菜单在Preferences菜单中打开Package settings->ctags->settings-user和settings-default

把default中的配置全部复制到user中,然后改一下command配置项,为ctags的可执行文件路径

喜欢用快捷键操作,控制函数的跳转:快捷键配置:

[
{
“command”: “navigate_to_definition”,
“keys”: [“ctrl+t”]
},
{
“command”: “jump_back”,
“keys”: [“alt+,”]
},
]

安装其他插件

1、ConvertToUTF8  支持UTF-8编码的插件

2、Bracket Highlighter  用于匹配括号,引号和html标签。对于很长的代码很有用。安装好之后,不需要设置插件会自动生效

3、DocBlockr  DocBlockr可以自动生成PHPDoc风格的注释。它支持的语言有Javascript, PHP, ActionScript, CoffeeScript, Java, Objective C, C, C++

4、Emmet(Zen Coding)  快速生成HTML代码段的插件,强大到无与伦比,不知道的请自行google

5、SideBar Enhancements  这个插件改进了侧边栏,增加了许多功能

6、Themr  主题管理,切换主题的时候,不用自己修改配置文件了,用这个可以方便的切换主题

7、SublimeTmpl,新建文件可选类型。编辑模版在:SublimeTmpl\templates”文件夹修改

8、phpcs    php语法提示

9、alignment      自动对齐

10、IMESupport       输入法跟踪问题

11、Git      版本控制(GitSavvy、SublimeGit同类竞品)

12、GitGutter    实时显示当前工作区的文件修改

13、Sublimerge    各种比较,套用官方的话和图如下

14、Compare Side-By-Side     Sublime版本的Beyond Compare

15、PlainTasks      todo列表

 

运行PHP文件

一、将PHP安装目录放如环境变量PATH

二、添加PHP的build system

1)进入如下菜单:

2)弹出内容如下:

{
    "cmd": ["make"]
}

修改为:

{ 
    "cmd": ["php", "$file"],
    "file_regex": "php$", 
    "selector": "source.php" }

3)保存在默认的目录下即可,注意修改文件名为 php.sublime-build 。

执行快捷键为Ctrl+B。

 

 

jquery重写$.ajax

(function($){
//首先备份下jquery的ajax方法
var_ajax=$.ajax;

//重写jquery的ajax方法
$.ajax=function(opt){
//备份opt中error和success方法
var fn = {
error:function(XMLHttpRequest, textStatus, errorThrown){},
success:function(data, textStatus){}
}
if(opt.error){
fn.error=opt.error;
}
if(opt.success){
fn.success=opt.success;
}

//扩展增强处理
var_opt = $.extend(opt,{
error:function(XMLHttpRequest, textStatus, errorThrown){
//错误方法增强处理
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
success:function(data, textStatus){
//成功回调方法增强处理
fn.success(data, textStatus);
},
beforeSend:function(XHR){
//提交前回调方法
$(‘body’).append(“<div id=’ajaxInfo’ style=”>正在加载,请稍后…</div>”);
},
complete:function(XHR, TS){
//请求完成后回调函数 (请求成功或失败之后均调用)。
$(“#ajaxInfo”).remove();;
}
});
return _ajax(_opt);
};
})(jQuery);

Yaf框架cli模式运行

为了更好的与web区分(配置文件,argc、argv判断等等).重新创建一个入口文件是比较好的做法。

$app = new YafApplication(APP_PATH . "/conf/application.ini");
$app->getDispatcher()->dispatch(new YafRequestSimple());

这样入口文件就完成了。接下来,你需要学会yaf命令行的调用方法。来一个示例:

php cli.php request_uri="/daemon/start"

Yaf_Request_Simple的构造函数可以不接受任何参数, 在这种情况下, Yaf_Request_Simple会在命令行参数中, 寻找一个字符串参数, 如果找到, 则会把请求的request_uri置为这个字符串。
request_uri=”/daemon/start” 中的路径便是Controller的路由路径。在例子里指向/Controller/Daemon.php 中的 startAction()。

还有一种方法,通过Yaf_Application::execute(..)去实现。先看一下这个函数的定义:

public void Yaf_Application::execute ( callable $entry , string $... )
This method is typically used to run Yaf_Application in a crontab work. Make the crontab work can also use the autoloader and Bootstrap mechanism.

第一参数需要定义一个回调函数,也可以是一个类中的某个函数。示例:

$application->execute("main", $argc, $argv);
或
$application->execute(array("Class","Method"), $argc, $argv);

后面的参数为一个可变列表,值为你希望传入的参数。综上所述,我们的另外一种入口文件可以写成:

$app = new YafApplication(APP_PATH . "/conf/application.ini");
$app->execute('callback', $avg1, $avg2 , ...);

如果需要通过bootstrap去初始化。只需要和web一样改为:

$app->bootstrap()->execute('callback', $avg1, $avg2 , ...);

最优美的解决办法

// parse cli
if ($request->isCli ()) {
    global $argc, $argv;
    if ($argc > 1) {
        $module = '';
        $uri = $argv [1];
        if (preg_match ( '/^[^?]*%/i', $uri )) {
            list ( $module, $uri ) = explode ( '%', $uri, 2 );
        }
        $module = strtolower ( $module );
        $modules = Yaf_Application::app ()->getModules ();
        if (in_array ( ucfirst ( $module ), $modules )) {
            $request->setModuleName ( $module );
        }
        if (false === strpos ( $uri, '?' )) {
            $args = array ();
        } else {
            list ( $uri, $args ) = explode ( '?', $uri, 2 );
            parse_str ( $args, $args );
        }
        foreach ( $args as $k => $v ) {
            $request->setParam ( $k, $v );
        }
        $request->setRequestUri ( $uri );
        if ($request->isRouted () && ! empty ( $uri )) {
            if (false !== strpos ( $uri, '/' )) {
                list ( $controller, $action ) = explode ( '/', $uri );
                $request->setActionName ( $action );
            } else {
                $controller = $uri;
            }
            $request->setControllerName ( ucfirst ( strtolower ( $controller ) ) );
        }
    }
}

如果在插件中实现,routerStartup只需要$request->setRequestUri ( $uri ),如果是dispatchLoopStartup需要单独setControllerName和setActionName。

PHP安全相关函数,过滤非法字符标签,防止sql注入

/***安全相关函数***/
/**
 * 安全过滤类-全局变量过滤
 * 在Controller初始化的时候已经运行过该变量,对全局变量进行处理
 * 使用方法:filter()
 * @return
 */
function filter() {
    if (is_array($_SERVER)) {
        foreach ($_SERVER as $k => $v) {
            if (isset($_SERVER[$k])) {
                $_SERVER[$k] = str_replace(array('<','>','"',"'",'%3C','%3E','%22','%27','%3c','%3e'), '', $v);
            }
        }
    }
    unset($_ENV, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS, $HTTP_ENV_VARS);
    filter_slashes($_GET);
    filter_slashes($_POST);
    filter_slashes($_COOKIE);
    filter_slashes($_FILES);
    filter_slashes($_REQUEST);
}

/**
 * 安全过滤类-加反斜杠,放置SQL注入
 * 使用方法:filter_slashes(&$value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function filter_slashes(&$value) {
    if (get_magic_quotes_gpc()) return false; //开启魔术变量
    $value = (array) $value;
    foreach ($value as $key => $val) {
        if (is_array($val)) {
            filter_slashes($value[$key]);
        } else {
            $value[$key] = addslashes($val);
        }
    }
}

/**
 * 安全过滤类-通用数据过滤
 * 使用方法:filter_escape($value)
 * @param string $value 需要过滤的变量
 * @return string|array
 */
function filter_escape($value) {
    if (is_array($value)) {
        foreach ($value as $k => $v) {
            $value[$k] = filter_str($v);
        }
    } else {
        $value = filter_str($value);
    }
    return $value;
}

/**
 * 安全过滤类-字符串过滤 过滤特殊有危害字符
 * 使用方法:filter_str($value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function filter_str($value) {
    $value = str_replace(array("\0","%00","\r"), '', $value);
    $value = preg_replace(array('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','/&(?!(#[0-9]+|[a-z]+);)/is'), array('', '&amp;'), $value);
    $value = str_replace(array("%3C",'<'), '&lt;', $value);
    $value = str_replace(array("%3E",'>'), '&gt;', $value);
    $value = str_replace(array('"',"'","\t",'  '), array('&quot;','&#39;','    ','&nbsp;&nbsp;'), $value);
    return $value;
}

/**
 * 安全过滤类-过滤javascript,css,iframes,object等不安全参数 过滤级别高
 * 使用方法:filter_script($value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function filter_script($value) {
    if (is_array($value)) {
        foreach ($value as $k => $v) {
            $value[$k] = filter_script($v);
        }
        return $value;
    } else {
        $parten = array(
            "/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i",
            "/<script(.*?)>(.*?)<\/script>/si",
            "/<iframe(.*?)>(.*?)<\/iframe>/si",
            "/<object.+<\/object>/isU"
        );
        $replace = array("\\2", "", "", "");
        $value = preg_replace($parten, $replace, $value, -1, $count);
        if ($count > 0) {
            $value = filter_script($value);
        }
        return $value;
    }
}

/**
 * 安全过滤类-过滤HTML标签
 * 使用方法:filter_html($value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function filter_html($value) {
    if (function_exists('htmlspecialchars')) return htmlspecialchars($value);
    return str_replace(array("&", '"', "'", "<", ">"), array("&amp;", "&quot;", "&#039;", "&lt;", "&gt;"), $value);
}

/**
 * 安全过滤类-对进入的数据加下划线 防止SQL注入
 * 使用方法:filter_sql($value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function filter_sql($value) {
    $sql = array("select", 'insert', "update", "delete", "\'", "\/\*",
        "\.\.\/", "\.\/", "union", "into", "load_file", "outfile");
    $sql_re = array("","","","","","","","","","","","");
    return str_replace($sql, $sql_re, $value);
}

/**
 * 私有路径安全转化
 * 使用方法:filter_dir($fileName)
 * @param string $fileName
 * @return string
 */
function filter_dir($fileName) {
    $tmpname = strtolower($fileName);
    $temp = array('://',"\0", "..");
    if (str_replace($temp, '', $tmpname) !== $tmpname) {
        return false;
    }
    return $fileName;
}

/**
 * 过滤目录
 * 使用方法:filter_path($path)
 * @param string $path
 * @return array
 */
function filter_path($path) {
    $path = str_replace(array("'",'#','=','`','$','%','&',';'), '', $path);
    return rtrim(preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path), '/');
}

/**
 * 过滤PHP标签
 * 使用方法:filter_phptag($string)
 * @param string $string
 * @return string
 */
function filter_phptag($string) {
    return str_replace(array('<?', '?>'), array('&lt;?', '?&gt;'), $string);
}

/**
 * 安全过滤类-返回函数
 * 使用方法:str_out($value)
 * @param  string $value 需要过滤的值
 * @return string
 */
function str_out($value) {
    $badstr = array("&", '"', "'", "<", ">", "%3C", "%3E");
    $newstr = array("&amp;", "&quot;", "&#039;", "&lt;", "&gt;", "&lt;", "&gt;");
    $value  = str_replace($newstr, $badstr, $value);
    return stripslashes($value); //下划线
}

Yii2 添加通用信息提示页面

首先定义信息提示view,/tip/index.php

<?php
$this->title = ‘提示信息’;
?>
<style>
.contentWrapper{ text-align: center; min-height: 300px; line-height: 30px;}
</style>
<div class=”contentWrapper”>
<div class=”faultTolerant notFund”>
<h4 class=”title”>提示</h4>
<p class=”content”><?=$message?></p>
<p class=”operation”><span class=”countDown”><span id=”sec”></span>秒后</span><a class=”linkHome” href=”<?=$url?>”>立即返回</a></p>
</div>
</div>
<?php $this->beginBlock(‘tipJs’) ?>
var secs = <?=$sec?>; //倒计时的秒数
var URL;
function Load(url) {
URL = url;
for (var i = secs; i >= 0; i–) {
window.setTimeout(‘doUpdate(‘ + i + ‘)’, (secs – i) * 1000);
}
}

function doUpdate(num) {
document.getElementById(“sec”).innerHTML = num ;
if (num == 0) {
window.location = URL;
}
}
$(function () {
Load(‘<?=$url?>’);
})

<?php $this->endBlock();
$this->registerJs($this->blocks[‘tipJs’], \yii\web\View::POS_END);
?>

两种方式实现此功能

第一种:采用Helper方式,如:
namespace common\helpers;

use Yii;

class TipHelper
{
/**
* 信息提示
* @param $message //提示内容
* @param string $url //跳转url,默认跳转至首页
* @param int $sec //多少秒跳转
* @return string
*/
static public function show($message, $url=”, $sec = 3)
{
$url = $url ? $url : Yii::$app->request->hostInfo;
return Yii::$app->controller->renderContent(Yii::$app->controller->renderPartial(‘/tip/index’,[‘message’=>$message, ‘url’ => $url, ‘sec’ => $sec]));
}

}

使用方法:
在控制器中调用
return common\helpers\TipHelper::show(‘提示信息内容’);

第二种:在BaseCotroller中定义通用方法
protected function tipShow($message, $url=”, $sec = 3)
{
return $this->renderContent($this->renderPartial(‘/tip/index’,[‘message’=>$message, ‘url’ => $url, ‘sec’ => $sec]));
}
在控制器中调用
return $this->tipShow(‘提示信息内容’);

 

wordpress优化,修改12处外加两个插件,让你的wordpress飞速奔跑!

  1. WordPress关闭自动更新检测
    在主题目录下的functions.php最后加入以下代码

    add_filter(‘pre_site_transient_update_core’, create_function(‘$a’, “return null;”)); // 关闭核心提示

    add_filter(‘pre_site_transient_update_plugins’, create_function(‘$a’, “return null;”)); // 关闭插件提示

    add_filter(‘pre_site_transient_update_themes’, create_function(‘$a’, “return null;”)); // 关闭主题提示

    remove_action(‘admin_init’, ‘_maybe_update_core’); // 禁止 WordPress 检查更新

    remove_action(‘admin_init’, ‘_maybe_update_plugins’); // 禁止 WordPress 更新插件

    remove_action(‘admin_init’, ‘_maybe_update_themes’); // 禁止 WordPress 更新主题

  2. 关闭自动更新
    在WordPress 根目录下的 wp-config.php 中define(‘WP_DEBUG’, false);行下添加代码

    define( ‘AUTOMATIC_UPDATER_DISABLED’, true );

  3. 关闭自动保存
    在WordPress 根目录下的 wp-config.php 中define(‘WP_DEBUG’, false);行下添加代码

    define(‘AUTOSAVE_INTERVAL’, 36000); // 10小时,设置为false会出现问题

    在主题目录下的functions.php最后加入以下代码

    wp_deregister_script(‘autosave’); //移除移动保存函数

  4. 取消自动修订版
    在WordPress 根目录下的 wp-config.php 中define(‘WP_DEBUG’, false);行下添加代码

    define(‘WP_POST_REVISIONS’,false);

    在主题目录下的functions.php最后加入以下代码

    remove_action(‘post_updated’,’wp_save_post_revision’ );

  5. 去除WORDPRESS自带的 Emoji
    在主题目录下的functions.php最后加入以下代码

    remove_action( ‘admin_print_scripts’ , ‘print_emoji_detection_script’);
    remove_action( ‘admin_print_styles’ , ‘print_emoji_styles’);
    remove_action( ‘wp_head’ , ‘print_emoji_detection_script’, 7);
    remove_action( ‘wp_print_styles’ , ‘print_emoji_styles’);
    remove_filter( ‘the_content_feed’ , ‘wp_staticize_emoji’);
    remove_filter( ‘comment_text_rss’ , ‘wp_staticize_emoji’);
    remove_filter( ‘wp_mail’ , ‘wp_staticize_emoji_for_email’);
    add_filter( ’emoji_svg_url’, create_function( ”, ‘return false;’ ) );//禁用emoji预解析

  6. 去除 XMLRPC, WLW, Generator, Feeds 和 ShortLink
    在主题目录下的functions.php最后加入以下代码

    remove_action(‘wp_head’, ‘rsd_link’); //removes EditURI/RSD (Really Simple Discovery) link.
    remove_action(‘wp_head’, ‘wlwmanifest_link’); //removes wlwmanifest (Windows Live Writer) link.
    remove_action(‘wp_head’, ‘wp_generator’); //removes meta name generator.
    remove_action(‘wp_head’, ‘wp_shortlink_wp_head’); //removes shortlink.
    remove_action( ‘wp_head’, ‘feed_links’, 2 ); //removes feed links.
    remove_action(‘wp_head’, ‘feed_links_extra’, 3 ); //removes comments feed.

  7. 去除和日志相关的 Link
    在主题目录下的functions.php最后加入以下代码

    remove_action(‘wp_head’, ‘parent_post_rel_link’, 10, 0 );//清除前后文信息
    remove_action(‘wp_head’, ‘start_post_rel_link’);
    remove_action(‘wp_head’, ‘index_rel_link’);
    remove_action(‘wp_head’, ‘adjacent_posts_rel_link’);

  8. 去除 Previous 和 Next 文章链接
    在主题目录下的functions.php最后加入以下代码

    remove_action(‘wp_head’, ‘adjacent_posts_rel_link_wp_head’);

  9. 禁用REST API功能代码
    在主题目录下的functions.php最后加入以下代码

    add_filter(‘rest_enabled’, ‘__return_false’);
    add_filter(‘rest_jsonp_enabled’, ‘__return_false’);

  10. 移除wp-json链接的代码
    在主题目录下的functions.php最后加入以下代码

    remove_action( ‘wp_head’, ‘rest_output_link_wp_head’, 10 );
    remove_action( ‘wp_head’, ‘wp_oembed_add_discovery_links’, 10 );

  11. 移除某些WP自带的小工具(根据自身情况调整)
    在主题目录下的functions.php最后加入以下代码

    function coolwp_remove_meta_widget()
    {

    unregister_widget(‘WP_Widget_Pages’);
    unregister_widget(‘WP_Widget_Calendar’);
    //unregister_widget(‘WP_Widget_Archives’);
    unregister_widget(‘WP_Widget_Links’);
    unregister_widget(‘WP_Widget_Meta’);
    //unregister_widget(‘WP_Widget_Search’);
    unregister_widget(‘WP_Widget_Text’);
    //unregister_widget(‘WP_Widget_Categories’);
    //unregister_widget(‘WP_Widget_Recent_Posts’);
    unregister_widget(‘WP_Widget_Recent_Comments’);
    unregister_widget(‘WP_Widget_RSS’);
    unregister_widget(‘WP_Widget_Tag_Cloud’);
    //unregister_widget(‘WP_Nav_Menu_Widget’);
    //register_widget(‘WP_Widget_Meta_Mod’);

    }
    add_action( ‘widgets_init’, ‘coolwp_remove_meta_widget’,11 );

  12. 移除WP为仪表盘(dashboard)页面加载的小工具
    在主题目录下的functions.php最后加入以下代码

    function cwp_remove_dashboard_widgets()
    {

    global $wp_meta_boxes,$wp_widget_factory;
    remove_action(‘wp_head’, array($wp_widget_factory->widgets[‘WP_Widget_Recent_Comments’] ,’recent_comments_style’));
    unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_quick_press’]);
    unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_incoming_links’]);
    unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_right_now’]);
    unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_plugins’]);
    unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_recent_drafts’]);
    unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_recent_comments’]);
    unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_primary’]);
    unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_secondary’]);

    }
    add_action(‘wp_dashboard_setup’, ‘cwp_remove_dashboard_widgets’,11 );

    另外安装WP Super Cache插件和Disable Google Fonts插件