生活, 其他记录

WordPress主题中需要修改的内容

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主题如下。

  1. 主题:Dara(8,000+)。应用实例:https://www.guanjihuan.com
  2. 主题:Polite(1,000+)。应用实例:https://py.guanjihuan.com

以下是其他WordPress主题。仅仅是安装过,这里做个记录,供参考,括号中为活跃的安装数量。

  1. 主题:GeneratePress(600,000+)
  2. 主题:Twenty Fifteen(100,000+)
  3. 主题:Twenty Twelve(80,000+)
  4. 主题:Blocksy(100,000+)
  5. 主题:BlogSite(6,000+)
  6. 主题: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,导致前台样式丢失,后台无法登录的解决办法

1,262 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

2 thoughts on “WordPress主题中需要修改的内容”

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code