WordPress插件推荐参考这篇文章:WordPress中常用的插件。
本篇列出WordPress主题中通常需要修改的内容,以及推荐一些WordPress主题。通常来说,一个主题不会完全满足自己所有的预期,如果想要修改一些细节,需要手动编辑WordPress主题的底层PHP代码或HTML/CSS代码,这稍微有点门槛。在手动编辑主题后,最好不要随意更新主题,否则会覆盖修改的内容,可通过修改版本号为 9999.x.x 来取消更新提示。如果确定要更新,需要提前把修改的代码做个备份。
一、主题中可能需要修改的内容
使用一个新主题时,在主题中可能需要修改的内容如下。
1. 给网站加入图标【推荐】
在主题header.php文件中添加以下代码:
<link rel="icon" href="文件.png" sizes="16x16" type="image/png">
参考资料:网站加入图标四种方法。
2. 修改页面底部【推荐】
在主题footer.php文件中修改或删除底部显示的文字。
3. 解决字符转义的问题【推荐】
在wordpress中有时候会转义显示为别的内容,如两个下划线。遇到这种情况这么解决:打开当前主题里面的functions.php函数文件,在文件末尾添加以下代码:
remove_filter('the_title', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');
remove_filter('the_content', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
参考资料:解决WordPress中字符转义的问题、WordPress 常用函数 / wptexturize
4. 修改古腾堡编辑器默认字体【推荐】
编辑器的默认字体比较难辨别前引号和后引号,所以这里推荐修改。主题里面的functions.php函数文件,在文件末尾添加以下代码:
/* 古腾堡编辑器默认字体样式 */
function custom_admin_css() {
echo '<style type="text/css">
/* 2021-4-15 增加 Windows 下宋体显示中文引号字体 */
@font-face {
font-family: quote;
src: local("PingFang SC"), local("SimSun");
unicode-range: U+201c, U+201d, U+2018, U+2019;
}
/* 2021-4-15 增加 .editor-styles-wrapper 及 !important */
.editor-rich-text.block-editor-rich-text, .wp-block-paragraph, .editor-styles-wrapper {
font-family: Pingfang SC, quote !important;
}
</style>';
}
add_action('admin_head', 'custom_admin_css');
以上代码转自 https://synyan.cn/t/30512,非常有用。
5. 修改站点字体【推荐】
修改字体可在自定义中完成,不需要在主题中修改。
如果对站点字体不满意,可在自定义中额外CSS中填入以下代码,把字体改为Times New Roman + SimHei,代码如下:
*:not([class*="icon"]):not(i){font-family: Times New Roman, SimHei, Microsoft YaHei !important;}
参考资料: wordpress怎么改中文字体。
6. 在首页中只显示摘要
有些主题在首页显示的是全文,而不是摘要。如果要在首页中只显示摘要,则要在主题编辑器里修改文件component - post - content.php,把内容的输出改为以下内容:
if(!is_single()) {
the_excerpt();
}
else {
the_content(__('(more…)'));
}
如果要修改摘要字数,在functions.php中增加:
function custom_excerpt_length( $length ) {
return 500;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
参考资料:
[1] 如何让WORDPRESS不显示文章全部内容,只显示部分摘要
[2] wordpress文章摘要限制the_excerpt()字符数(文字数量)
7. 自定义评论的标题
在functions.php中增加:
add_filter('comment_form_defaults', 'set_my_comment_title', 20);
function set_my_comment_title( $defaults ){
$defaults['title_reply'] = __('Custom leave a comment', 'customizr-child');
return $defaults;
}
参考资料:https://presscustomizr.com/snippet/how-to-change-the-leave-a-comment-text-in-wordpress/
8. 修改评论摘要的长度
在functions.php中增加(代码参考 ChatGPT):
function custom_comment_excerpt_length( $length ) {
return 20; // 修改为你想要的摘要长度
}
add_filter( 'comment_excerpt_length', 'custom_comment_excerpt_length' );
9. 在所有区域(包括评论区)支持pre标签
在functions.php中增加:
function allowedtags_pre() {
global $allowedtags;
$allowedtags['pre'] = array();
}
add_action('all', 'allowedtags_pre');
10. 设置文章和页面中链接默认在新窗口中打开
可通过插件实现,不一定修改主题。推荐使用这个插件:WP External Links,可以使得外链在新窗口打开。
另外,可在WordPress主题的 functions.php中添加下面的代码,实现链接全部在新窗口打开(不推荐):
function autoblank($text) {
$return = str_replace('<a', '<a target="_blank"', $text);
return $return;
}
add_filter('the_content', 'autoblank');
这种方式就是默认为在新窗口中打开,只限于在内容部分(文章和页面)。而菜单栏、边栏、文章列表,以及php调用的内容还是默认在自身页面打开。采用这种方法,如果在内容 (文章和页面) 中个别链接要在本身页面中打开,这时候是没办法的,暂时找不到解决办法,所以不推荐。
11. 在文章或页面中调用公共的内容
可通过插件实现,不一定修改主题。
列举三个方法【推荐第一种方法】:
(1)使用Content Blocks插件。
(2)使用Insert PHP Code Snippet插件。在页面中新建一个公共的模板,填写内容,记住页面的id。然后在插件中写入以下代码(记得修改id)。最后在文章或页面中有需要的地方调用。
<?php
$page_id = 100;
echo get_post($page_id) -> post_content;
?>
(3)如果是所有的文章都使用某个公共的内容,那么也可以在WordPress主题里修改,components -> post -> content.php,在这里写上php代码。这样所有的文章都会调用该内容。
12. 加入统计代码
在主题header.php文件中插入百度统计代码或者其他统计代码。
13. 添加页面广告代码
不推荐添加。
在主题header.php文件中可插入第三方广告的身份认证代码。如果是百度广告,需要网站备案才行。不建议添加谷歌广告,因为会大幅度减慢网页速度。
由于广告在很大程度上会影响阅读体验,也会影响打开速度,因此这里不推荐添加。
二、多用户站点主题中可能需要修改的内容
如果网站是多用户模式,可能需要修改的内容如下。
1. 关闭标签功能
在functions.php中添加:
//关闭标签功能
function mt_unregister_post_tag() {
unregister_taxonomy_for_object_type('post_tag', 'post');
}
add_action( 'init', 'mt_unregister_post_tag' );
2. 后台只显示作者自己的文章
在functions.php中添加:
// 只显示作者自己的文章
function mypo_parse_query_useronly( $wp_query ) {
if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' ) !== false ) {
if ( !current_user_can( 'manage_options' ) ) {
global $current_user;
$wp_query->set( 'author', $current_user->id );
}
}
}
add_filter('parse_query', 'mypo_parse_query_useronly' );
3. 评论中只显示和作者自己文章相关的评论
在functions.php中添加:
//后台只显示当前用户文章关联的评论 (需要修改数据库名wp_,这里为guan_wp_)
function wpdx_get_comment_list_by_user($clauses) {
if (is_admin()) {
global $user_ID, $wpdb;
$clauses['join'] = ", guan_tmp69ef17_posts";
$clauses['where'] .= " AND guan_tmp69ef17_posts.post_author = ".$user_ID." AND guan_wp_comments.comment_post_ID = guan_tmp69ef17_posts.ID";
};
return $clauses;
};
if(!current_user_can('edit_others_posts')) {
add_filter('comments_clauses', 'wpdx_get_comment_list_by_user');
}
原版是:
//后台只显示当前用户文章关联的评论
function wpdx_get_comment_list_by_user($clauses) {
if (is_admin()) {
global $user_ID, $wpdb;
$clauses['join'] = ", tmp69ef17_posts";
$clauses['where'] .= " AND tmp69ef17_posts.post_author = ".$user_ID." AND wp_comments.comment_post_ID = tmp69ef17_posts.ID";
};
return $clauses;
};
if(!current_user_can('edit_others_posts')) {
add_filter('comments_clauses', 'wpdx_get_comment_list_by_user');
}
4. 媒体库中只显示作者自己的文件
在functions.php中添加:
//在文章编辑页面的[添加媒体]只显示用户自己上传的文件
function my_upload_media( $wp_query_obj ) {
global $current_user, $pagenow;
if( !is_a( $current_user, 'WP_User') )
return;
if( 'admin-ajax.php' != $pagenow || $_REQUEST['action'] != 'query-attachments' )
return;
if( !current_user_can( 'manage_options' ) && !current_user_can('manage_media_library') )
$wp_query_obj->set('author', $current_user->ID );
return;
}
add_action('pre_get_posts','my_upload_media');
//在[媒体库]只显示用户上传的文件
function my_media_library( $wp_query ) {
if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/upload.php' ) !== false ) {
if ( !current_user_can( 'manage_options' ) && !current_user_can( 'manage_media_library' ) ) {
global $current_user;
$wp_query->set( 'author', $current_user->id );
}
}
}
add_filter('parse_query', 'my_media_library' );
5. 列出Wordpress中的所有作者
<ul>
<?php wp_list_authors("exclude_admin=0&optioncount=1&show_fullname=1&hide_empty=1"); ?>
</ul>
参考资料:如何在WordPress中列出您博客中的所有作者。
6. 后台管理显示注册的时间
补充:插件“When Last Login”、“注册IP”也有类似的功能。以下是手动的方法:
在functions.php中添加:
/**
* WordPress 后台用户列表显示注册时间
* https://www.wpdaxue.com/display-user-registerdate.html
*/
class RRHE {
// Register the column - Registered
public static function registerdate($columns) {
$columns['registerdate'] = __('注册时间', 'registerdate');
return $columns;
}
// Display the column content
public static function registerdate_columns( $value, $column_name, $user_id ) {
if ( 'registerdate' != $column_name )
return $value;
$user = get_userdata( $user_id );
$registerdate = get_date_from_gmt($user->user_registered);
return $registerdate;
}
public static function registerdate_column_sortable($columns) {
$custom = array(
// meta column id => sortby value used in query
'registerdate' => 'registered',
);
return wp_parse_args($custom, $columns);
}
public static function registerdate_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'registerdate' == $vars['orderby'] ) {
$vars = array_merge( $vars, array(
'meta_key' => 'registerdate',
'orderby' => 'meta_value'
) );
}
return $vars;
}
}
// Actions
add_filter( 'manage_users_columns', array('RRHE','registerdate'));
add_action( 'manage_users_custom_column', array('RRHE','registerdate_columns'), 15, 3);
add_filter( 'manage_users_sortable_columns', array('RRHE','registerdate_column_sortable') );
add_filter( 'request', array('RRHE','registerdate_column_orderby') );
参考资料:https://www.wpdaxue.com/display-user-registerdate.html
三、主题记录
正在使用的WordPress主题如下。
- 主题:Dara(8,000+)。应用实例:https://www.guanjihuan.com。
- 主题:Polite(1,000+)。应用实例:https://py.guanjihuan.com。
以下是其他WordPress主题。仅仅是安装过,这里做个记录,供参考,括号中为活跃的安装数量。
- 主题:GeneratePress(600,000+)
- 主题:Twenty Fifteen(100,000+)
- 主题:Twenty Twelve(80,000+)
- 主题:Blocksy(100,000+)
- 主题:BlogSite(6,000+)
- 主题:Academica(4,000+)
四、下载插件时提示需要FTP时的解决方法
在根目录wp-config.php文件中增加:
/* WordPress的临时目录。*/
define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');
/* 表示直接下载*/
define("FS_METHOD", "direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);
注意:需要把以上代码放在以下代码的后面。
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
此外,还需要在 wp-content 目录中新建 tmp 文件夹。
有时候还需要把整个 wordpress 文件夹改成 755 的权限。
参考资料:彻底解决wordpress安装主题或插件需要FTP问题。
五、WordPress+SSL+反向代理时可能需要修改的地方
在根目录wp-config.php文件中增加:
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
注意:需要把以上代码放在以下代码的前面。
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
参考资料:
[1] wordpress配置HTTPS 登录后台显示“抱歉,您不能访问此页面”解决办法
[2] WordPress使用nginx反向代理并且开启SSL,导致前台样式丢失,后台无法登录的解决办法
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】
这个很全啊
嗯,用到了就记录下。