WordPress中如何为文章添加分页?
WordPress中的行距问题
WordPress迁移或更换域名相关
迁移主机后图片无法上传
删除或限制Wordpress中的revision
如何为Wordpress添加Gzip压缩?
WordPress如何切换域名?
WordPress如何防渗透黑客攻击?
WordPress如何为文章中指定关键词添加超链接?
访问后如出现File not found的报错(Nginx)
正在执行例行维护,请一分钟后回来。
如何自定义Wordpress登录后台
小技巧
1.Smartideo插件可用于直接输入QQ等视频网址而直接显示视频并自动适配电脑和移动端
另通过过vid获取QQ视频的网址方法:http://v.qq.com/page/y/o/0/{vid}.html
2.在Mac上编辑文章时可按下Command+Control+Space来调出Emoji窗口输入表情符号
3.Google字体库, Gravitar等国内访问慢的问题,可以通过WP Acceleration for China等插件解决这一问题,对应的文件在wp-includes/script-loader.php中
如何解双横线只显示为单横线的问题?
注释wp-includes/formatting.php文件中如下行:
1 2 3 4 |
//$dynamic['/---/'] = $em_dash; //$dynamic[ '/(?<=^|' . $spaces . ')--(?=$|' . $spaces . ')/' ] = $em_dash; //$dynamic['/(?<!xn)--/'] = $en_dash; //$dynamic[ '/(?<=^|' . $spaces . ')-(?=$|' . $spaces . ')/' ] = $en_dash; |
WordPress中如何为文章添加分页?
在Wordpress中发表较长的文章时,会希望添加分页的功能,避免一个页面中内容过于庞杂。在默认的编辑器(TinyCME)中,却找不到相应按钮,只有一个插入Read More的按钮。细心的朋友在插入Read More后进入代码编辑部分会看到<!–more–>(快捷键Alt+Shift+T)这样一行代码,事实上添加页面可以使用相似的方法,即在代码对应部分添加<!–nextpage–>(在视图编辑模式也可使用快捷键Alt+Shift+P),这样就可以实现分页的功能了。
Wordpress中的行距问题
在视图编辑窗口,按下Enter键会发现行距较大,中间间距占一行,事实上通过快捷键Shift+Enter 就不会出现大行距的情况了。
WordPress迁移或更换域名相关
WordPress迁移如同其它网站一样,需要两部分内容,一部分是网站代码文件,根据所使用系统不同位于public_html,www或htdocs等文件夹下;另一部分就是数据库文件(如使用phpmyadmin可使用export导出,import导入),可以分别打包进行迁移。如进行域名更换则需对后台Settings>General下Wordpress Address和Site Address的进行更换(也可更改数据库中wp_options表option name为siteurl和home的option_value值)。
对于已有内容的网站通常则更为复杂一些,因为之前的文章中会有链接、图片等内容写在wp_posts表中,以从www.foo.com/blog更换为blog.foo.com为例,需要对wp_posts表进行如下操作:
1.update wp_posts set guid = replace(guid, ‘http://www.foo.com/blog’,’http://blog.foo.com’
2.update wp_posts set post_content = replace(post_content, ‘http://www.foo.com/blog’,’http://blog.foo.com’
同时提醒各位关注.htaccess文件,很多时候需要对此文件也进行相应更改。
迁移主机后图片无法上传
这一错误提示内容类似:Unable to create directory uploads/2014/07. Is its parent directory writable by the server?
检查父级目录wp-content,如果所有者无可写权限(数字看是否为7,字母看是否为rwx),则将权限修改为755即可。如果权限没有问题,这通常会发生在通过GoDaddy等主机的一键安装Wordpress站点上,因为一键安装会默认在Settings>Media下写入一个绝对地址,而迁移站点后绝对地址会发生改变,将其修改为默认路径wp-content/uploads即可。
删除或限制Wordpress中的revision
WordPress会在对帖子进行编辑时进行autosave自动保存,同时每次对帖子修改后都会保存一个revision版本,这样导致如果对同一个帖子进行多次编辑后产生大量的垃圾文件,占用不必要的空间。(据考证这并不会像大家所认为的那样影响到网站的访问速度)
有这么几种方法可供参考,一是安装一款名为Better Delete Revision的插件,二是直接在数据库中进行删除处理,参考语句如下:
DELETE FROM wp_posts WHERE post_status!=’publish’ OR post_type=’revision’;
第三种方法是在wp-config.php文件上方添加如下代码(加粗部分),WP_POST_REVISIONS值表示保存的revision数量,设为false表示不保存
* @package WordPress
*/
define(‘WP_POST_REVISIONS’, 3);
// ** MySQL settings – You can get this info from your web host ** /
如何为Wordpress添加Gzip压缩?
WordPress中添加Gzip压缩的方法很多,这里介绍一种修改.htaccess文件来实现Gzip压缩的方法。开启Gzip压缩首先要先确认服务器是否已开户该模块,这个可以通过phpinfo()等方法进行验证。这里介绍的方法是在.htaccess中添加如下代码:
# Insert filters
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml
# Drop problematic browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E]!no-gzip !gzip-only-text/html
# Make sure proxies don‘t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
禁止爬虫爬行
想要禁止搜索引擎爬行可通过在meta中添加noindex, nofollow信息或在robots.txt中添加disallow两种方式,前者是后台Settings>Reading下勾选Discourage search engines from indexing this site来实现的。这通常在调试安装博客时使用。
删除所有垃圾评论
在博客有了一定的访问量后,垃圾评论会非常多,在后台删除会比较耗时,可以直接在数据库中删除所有未审核通过的评论:
DELETE FROM wp_comments WHERE comment_approved = 0
此外也可通过强制仅登录客户才可评论来减少垃圾评论,只需在Settings > Discussion内将Other comment settings下面的
文字换行
有时比较长的链接或字符串会导到前后内容断开而单独作为一行显示,这进只要在p标签或相应内容的css上添加上word-break:break-all;即可以了。
WordPress如何切换域名
主要需要修改如下数据表
UPDATE wp_options SET option_value = replace( option_value, 'http://旧域名', 'http://新域名') WHERE option_name = 'home' OR option_name ='siteurl' ; UPDATE wp_posts SET post_content = replace(post_content, 'http://旧域名', 'http://新域名'); UPDATE wp_posts SET guid = replace( guid, 'http://旧域名', 'http://新域名') ;
此外出于seo考虑,应在.htaccess文件中添加301转向的相应代码
WordPress如何防渗透黑客攻击?
1.设置文件及目录权限
Linux下的参考命令(-type d为目录,-type f为文件):
1 2 |
find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \; find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \; |
2.设置自动更新
不论是禁止还是开启自动更新,都是在wp-config.php中设置,以下提供一些常用的设置代码
禁止一切更新
1 |
define( 'AUTOMATIC_UPDATER_DISABLED', true ); |
核心组件更新
1 |
define( 'WP_AUTO_UPDATE_CORE', false ); |
有三个可选值
true – 开发版,小更新,大更新都会自动更新。
false – 开发版,小更新,大更新都不会自动更新。
minor – 只有小版本更新才会自动更新
通过过滤器来设置是否自动更新
开启开发更新模式,和开发版本同步:
1 |
add_filter( 'allow_dev_auto_core_updates', '__return_true' ); |
关闭小版本更新:
1 |
add_filter( 'allow_minor_auto_core_updates', '__return_false' ); |
开启大版本更新:
1 |
add_filter( 'allow_major_auto_core_updates', '__return_true' ); |
开启插件自动更新:
1 |
add_filter( 'auto_update_plugin', '__return_true' ); |
开启主题自动更新:
1 |
add_filter( 'auto_update_theme', '__return_true' ); |
翻译更新默认是开启的,如果要关闭:
1 |
add_filter( 'auto_update_translation', '__return_false' ); |
3.数据库权限控制
WordPress中任何常规操作如添加文章、上传图片、添加评论、安装插件等都只涉及到增删改查的数据库操作,像DROP, ALTER, GRANT这样的权限则可不予以授权。
注:有些插件、主题或Wordpress的重大更新可能会更改数据库结构,这时则需要临时进行相关授权。
4.wp-includes的保护机制
通过更改根目录下的.htaccess文件可以防止攻击脚本使用mod_rewrite重写模块,注意请将以下代码放在# BEGIN WordPress和# END WordPress的外面,以防在更新时该内容被覆盖
1 2 3 4 5 6 7 8 9 10 |
# Block the include-only files. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule> |
5.wp-config.php保护机制
可将wp-config.php从Wordpress的根目录中前移到上一级目录,另外可在.htacess的最上面添加如下代码禁止外部人员访问该文件
1 2 3 |
<files wp-config.php> deny from all </files> |
6.禁止文件编辑
WordPress后台中默认允许管理员编辑PHP文件,可通在wp-config.php中添加以下代码来限制这种编辑
1 |
define( 'DISALLOW_FILE_EDIT', true ); |
攻击脚本中通常可能会包含eval(), exec(),base64_encode() / base64_decode, shell_exec(), gzinflate(), fopen(), curl_exec(), popen(),可在Linux下cd到博客根目录导出相关的文件进行查看,如
1 |
grep -irl "eval(\|exec(\|base64(" ./ > ../testlog |
以上只是列举一部分例子,要保障自身博客的安全,需要在平时就多注意,比如在插件和主题的选择上等等。
WordPress如何为文章中指定关键词添加超链接?
这一功能可通过很多插件来实现,我们介绍一种无需插件即可轻松实现该功能的方法。找到当前主题目录下的functions.php文件(后台点击Appearance>Editor亦可找到该文件)并添加如下代码:
1 2 3 4 5 6 7 8 9 10 |
function replace_text_wp($text){ $replace = array( 'keyword1' => '<a href="http://alanhou.org/" rel="bookmark" title="keyword1">keyword1</a>', 'keyword2' => '<a href="http://alanhou.org/" rel="bookmark" title="keyword2">keyword2</a>', ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'replace_text_wp'); |
6/1/2016更新
1.此更新解决在img的alt属性或a标签的title属性出现同一关键词时会同时被替换导致代码错乱的问题
2.解决大小写替换问题(如需区分大小写请将str_ireplace替换为str_replace)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function replace_text_wp($text){ $parts = preg_split('/(<(?:img.*|a.*)>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $replace = array( 'keyword1' => '<a href="http://alanhou.org/" rel="bookmark" title="keyword1">keyword1</a>', 'keyword2' => '<a href="http://alanhou.org/" rel="bookmark" title="keyword2">keyword2</a>', ); ); for ($i=0, $n=count($parts); $i<$n; $i+=2) { $parts[$i] = str_ireplace(array_keys($replace), $replace, $parts[$i]); } $text = implode('', $parts); return $text; } add_filter('the_content', 'replace_text_wp'); |
后台”添加媒体”、”插入或编辑链接”点击没有反应
打开wp-config.php,在最后面加上如下代码
1 |
define('CONCATENATE_SCRIPTS', false ); |
‘WP_Session_Tokens’ not found
这一报错发生在登录到后台时,出现这一问题的原因通常是由于不当升级所致,请下载最新的Wordpress版本并合并覆盖到根目录下(注意备份好wp-config.php),然后执行wp-admin/upgrade.php文件完成升级
1 |
Fatal error: Class 'WP_Session_Tokens' not found in D:\xampp\htdocs\wordpress\wp-includes\pluggable.php on line 900 |
访问后如出现File not found的报错
这一问题通常出现在Nginx服务器上,细心的朋友会发现url中间少了wp-admin这一块。解决这一问题需要在该网站Nginx配置文件server的结束花括号}前添加如下配置
1 |
rewrite /wp-admin$ $scheme://$host$uri/ permanent; |
正在执行例行维护,请一分钟后回来。
一般在升级主题、插件时会进行维护模式,此时访问网站就会出现“正在执行例行维护,请一分钟后回来。”的提示,这时登录SSH或FTP,找到根目录下的.maintenance文件并删除即可。
It may be down for maintenance or configured incorrectly.
这一报错通常出现在升级未正常完成的时候,首先尝试删除根目录下的.maintenance文件,看是否还会出现同样的报错。如果报错依然存在,请打开根目录下的wp-config.php,并将
define(‘WP_DEBUG’, false);
修改为
define(‘WP_DEBUG’, true);
这样就会出现具体报错信息,比如升级文件缺失等,可以针对具体问题进行具体解决
Server error
500
The website encountered an error while retrievinghttp://XXX.com/XXX. It may be down for maintenance or configured incorrectly.
如何自定义Wordpress登录后台
很多朋友在使用Wordpress时都会有想要修改后台登录界面的冲动,下面就介绍如何进行相关修改
大家最希望修改的可能就是上面的logo部分,这个图片部分实际上是通过CSS写到如下内容中的
1 |
<a href="https://wordpress.org/" title="Powered by WordPress" tabindex="-1">记录点滴生活 | Alan Hou的个人博客</a> |
想要修改图片,只需在主题文件的functions.php中添加如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function my_login_logo() { ?> <style type="text/css"> .login h1 a { background-image: url(<?php echo get_stylesheet_directory_uri(); ?>/images/logo.png); //替换成相应的图片地址 padding-bottom: 30px; } </style> <?php } add_action( 'login_enqueue_scripts', 'my_login_logo' ); |
与logo相关的还有其中的链接和title,这部分可以通过如下代码来进行修改
1 2 3 4 5 6 7 8 9 |
function my_login_logo_url() { return home_url(); } add_filter( 'login_headerurl', 'my_login_logo_url' ); function my_login_logo_url_title() { return '记录点滴生活 | Alan Hou的个人博客'; } add_filter( 'login_headertitle', 'my_login_logo_url_title' ); |
当然很多完美主义者一定会不满足于此,那么就可以添加自己的css和js文件,在functions.php中添加代码如下:
1 2 3 4 5 |
function my_login_stylesheet() { wp_enqueue_style( 'custom-login', get_template_directory_uri() . '/style-login.css' ); wp_enqueue_script( 'custom-login', get_template_directory_uri() . '/style-login.js' ); } add_action( 'login_enqueue_scripts', 'my_login_stylesheet' ); |
To perform the requested action wordpress needs to access your web server.
在本地进行插件或主题安装时出现上述报错,解决方法是在wp-config.php中加入
1 |
define( 'FS_METHOD', 'direct' ); |
隐藏Admin Toolbar
针对用户可在Users>Your Profile中进行操作,而全局隐藏可通过在functions.php中添加如下代码:
1 |
add_filter('show_admin_bar', '__return_false'); |
如何通过数据库修改主题
1 2 |
# 主要有三张表 select * from wp_options where option_name = 'template' or option_name='stylesheet' or option_name='current_theme'; |