这是一个有用的 WordPress 功能列表,我经常参考这些功能来增强或清理我的网站。请小心并做好备份。
对除管理员之外的所有人隐藏 WordPress 更新提示
使用正确的 WordPress 标题
创建自定义 WordPress 仪表板小部件
删除所有仪表板小部件
包括导航菜单
插入自定义登录徽标
修改管理页脚文本
入队样式和脚本
排队 Google 字体
修改摘录长度
更改阅读更多链接
更改更多摘录
禁用表情符号混乱
删除评论
更改媒体库 URL
创建自定义缩略图大小
添加附件类别
为附件添加标签
将自定义摘录添加到页面
创建全局字符串
支持特色图片
支持搜索表格
从搜索中排除页面
禁用 XMLRPC
在帖子中转义 HTML
创建自定义全局设置
删除 WordPress 管理栏
添加开放图元标签
添加自定义帖子类型
在主题中实现与 Google 字体的预连接
将缩略图列添加到帖子列表
将引导类添加到第一段
从搜索中排除自定义帖子类型
从静态资源中删除查询字符串
从评论表单中禁用网站字段
修改jQuery
禁用 JSON Rest API
开关柱类型
PHP记录器
始终在 TinyMCE 中显示第二个栏
根据用户角色删除管理菜单项
根据电子邮件地址(域)删除管理菜单项
重新排序管理菜单项
从 WordPress 循环中排除类别
禁用消息“JQMIGRATE:Migrate 已安装,版本 1.4.1”
稍后加载繁重的第 3 方脚本以获得更好的性能
/** * 对除管理员之外的所有人隐藏 WordPress 更新提示 */ function hide_update_notice_to_all_but_admin() { if ( !current_user_can( 'update_core' ) ) { remove_action( 'admin_notices', 'update_nag', 3 ); } }add_action( 'admin_head', 'hide_update_notice_to_all_but_admin', 1 );
确保从标题中删除<title>
标记。
/** * 使用正确的 WordPress 标题 */add_theme_support( 'title-tag' );
/** * 创建自定义 WordPress 仪表板小部件 */ function仪表板_widget_function() { echo ' <h2>自定义仪表板小部件</h2> <p>此处自定义内容</p> '; }function add_dashboard_widgets() { wp_add_dashboard_widget( 'custom_dashboard_widget', '自定义仪表板小部件', 'dashboard_widget_function' ); }add_action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
/** * 删除所有仪表板小部件 */ function remove_dashboard_widgets() { global $wp_meta_boxes; 取消设置( $wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] ); 取消设置( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links'] ); 取消设置( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now'] ); 取消设置( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'] ); 取消设置( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts'] ); 取消设置( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments'] ); 取消设置( $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] ); 取消设置( $wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'] ); 删除_meta_box( 'dashboard_activity', '仪表板', '正常' ); }add_action( 'wp_dashboard_setup', 'remove_dashboard_widgets' );
/** * 包含导航菜单 */function register_my_menu() { register_nav_menu( 'nav-menu', __( '导航菜单' ) ); }add_action( 'init', 'register_my_menu' );
将其插入您希望其出现的位置,然后将菜单保存在Appearance -> Menus中。
wp_nav_menu( array( '主题位置' => '导航菜单' ) );
这是多个菜单的代码:
function register_my_menus() { register_nav_menus( array( 'new-menu' => __( '新菜单' ), 'another-menu' => __( '另一个菜单' ), 'an-extra-menu' => __( “额外菜单”), ) ); }add_action( 'init', 'register_my_menus' );
/** * 插入自定义登录徽标 */ function custom_login_logo() { echo ' <style> .login h1 a { background-image: url(image.jpg) !important; 背景大小:234px 67px; 宽度:234px; 高度:67 像素; 显示:块; } </风格> '; }add_action( 'login_head', 'custom_login_logo' );
/** * 修改管理页脚文本 */ functionmodify_footer() { echo '由<a href="mailto:[email protected]">您</a>创建。'; }add_filter( 'admin_footer_text', 'modify_footer' );
/** * 将样式和脚本入队 */ function custom_scripts() { wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css', array(), '3.3.6' ); wp_enqueue_style( 'style', get_template_directory_uri() . '/css/style.css' ); wp_enqueue_script( 'bootstrap', get_template_directory_uri() . '/js/bootstrap.min.js', array('jquery'), '3.3.6', true ); wp_enqueue_script( 'script', get_template_directory_uri() . '/js/script.js' ); }add_action( 'wp_enqueue_scripts', 'custom_scripts' );
/** * 将 Google 字体加入队列 */ function google_fonts() { wp_register_style( 'OpenSans', '//fonts.googleapis.com/css?family=Open+Sans:400,600,700,800' ); wp_enqueue_style( 'OpenSans' ); }add_action( 'wp_print_styles', 'google_fonts' );
/** * 修改摘录长度 */ function custom_excerpt_length( $length ) { return 25; }add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
/** * 更改阅读更多链接 */ function custom_read_more_link() { return '<a href="' . get_permalink() . '">阅读更多</a>'; }add_filter( 'the_content_more_link', 'custom_read_more_link' );
/** * 更改更多摘录 */ function custom_more_excerpt( $more ) { return '...'; }add_filter( 'excerpt_more', 'custom_more_excerpt' );
/** * 禁用表情符号混乱 */ functiondisable_wp_emojicons() {remove_action( 'admin_print_styles', 'print_emoji_styles' ); 删除操作( 'wp_head', 'print_emoji_detection_script', 7 ); 删除操作('admin_print_scripts','print_emoji_detection_script'); 删除操作('wp_print_styles','print_emoji_styles'); 删除过滤器('wp_mail','wp_staticize_emoji_for_email'); 删除过滤器('the_content_feed','wp_staticize_emoji'); 删除过滤器('comment_text_rss','wp_staticize_emoji'); add_filter( 'tiny_mce_plugins', 'disable_emojicons_tinymce' ); add_filter( 'emoji_svg_url', '__return_false' ); }add_action( 'init', 'disable_wp_emojicons' );函数disable_emojicons_tinymce( $plugins ) { return is_array( $plugins ) ? array_diff( $plugins, array( 'wpemoji' ) ) : array(); }
/** * 删除评论 */ // 从管理菜单中删除function my_remove_admin_menus() { remove_menu_page( 'edit-comments.php' ); }add_action( 'admin_menu', 'my_remove_admin_menus' );// 从帖子和页面中删除 function remove_comment_support() { remove_post_type_support( 'post', 'comments' ); remove_post_type_support( '页面', '评论' ); }add_action( 'init', 'remove_comment_support', 100 );// 从管理栏中删除 function mytheme_admin_bar_render() { global $wp_admin_bar; $wp_admin_bar->remove_menu( '评论' ); }add_action( 'wp_before_admin_bar_render', 'mytheme_admin_bar_render' );
/** * 更改媒体库 URL */ if (empty( get_option( 'upload_url_path' ) ) ) { update_option( 'upload_url_path', 'http://assets.website.com/wp-content/uploads' ); }
另外,您可以在从数据库检索选项值之前对其进行过滤,这会稍微好一些:
/** * 更改媒体库 URL */ add_filter( 'pre_option_upload_url_path', function() { return 'http://assets.website.com/wp-content/uploads'; });
/** * 创建自定义缩略图大小 */ add_image_size( 'custom-thumbnail', 250, 250, true );
检索缩略图
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), '自定义缩略图' );echo $thumb[0];
从 WordPress 4.4.0 开始,您可以使用:
the_post_thumbnail_url( $size );
/** * 添加附件类别 */ function add_categories_for_attachments() { register_taxonomy_for_object_type( 'category', 'attachment' ); }add_action( 'init' , 'add_categories_for_attachments' );
/** * 为附件添加标签 */ function add_tags_for_attachments() { register_taxonomy_for_object_type( 'post_tag', 'attachment' ); }add_action( 'init' , 'add_tags_for_attachments' );
/** * 将自定义摘录添加到页面 */ function add_page_excerpt() { add_post_type_support( 'page', array( 'excerpt' ) ); }add_action( 'init', 'add_page_excerpt' );
/** * 创建一个全局字符串 */ function global_string() { return 'String'; }
检索字段
回显全局字符串();
/** * 支持特色图片 */ add_theme_support( 'post-thumbnails' );
/** * 支持搜索表单 */ add_theme_support( 'html5', array( 'search-form' ) );
/** * 从搜索中排除页面 */ function except_pages_from_search() { global $wp_post_types; $wp_post_types['page']->exclude_from_search = true; }add_action( 'init', 'exclude_pages_from_search' );
/** * 禁用 xmlrpc.php */ add_filter( 'xmlrpc_enabled', '__return_false' );remove_action( 'wp_head', 'rsd_link' );remove_action( 'wp_head', 'wlwmanifest_link' );
/** * 在 <code> 或 <pre><code> 标签中转义 HTML。 */ function escapeHTML($arr) { if (version_compare(PHP_VERSION, '5.2.3') >= 0) { $output = htmlspecialchars($arr[2], ENT_NOQUOTES, get_bloginfo('charset'), false); } else { $specialChars = array( '&' => '&', '<' => '<', '>' => '>' ); // 解码已转换的数据 $data = htmlspecialchars_decode( $arr[2] ); // 转义 <pre> 内的所有数据 $output = strtr( $data, $specialChars ); } if (!empty($output)) { return $arr[1] 。 $输出。 $arr[3]; } else { 返回 $arr[1] 。 $arr[2] 。 $arr[3]; } }function filterCode($data) { // 如果您想转义 <pre> 标记内的任何内容,请取消注释 //$modifiedData = preg_replace_callback( '@(<pre.*>)(.*)(</pre>) @isU', 'escapeHTML', $data ); $modifiedData = preg_replace_callback( '@(<code.*>)(.*)(</code>)@isU', 'escapeHTML', $data ); $modifiedData = preg_replace_callback( '@(<tt.*>)(.*)(</tt>)@isU', 'escapeHTML', $modifiedData ); 返回$modifiedData; }add_filter( 'content_save_pre', 'filterCode', 9 );add_filter( 'excerpt_save_pre', 'filterCode', 9 );
修改自 Escape HTML。
/** * 创建自定义全局设置 */ function custom_settings_page() { ?> <div class="wrap"> <h1>自定义设置</h1> <form method="post" action="options.php"> <?php settings_fields( 'section' ); do_settings_sections( '主题选项' ); 提交按钮(); ?> </形式> </div><?php }function custom_settings_add_menu() { add_theme_page( '自定义设置', '自定义设置', 'manage_options', '自定义设置', 'custom_settings_page', null, 99 ); }add_action( 'admin_menu', 'custom_settings_add_menu' );// 设置示例 function setting_twitter() { ?> <input type="text" name="twitter" id="twitter" value="<?php echo get_option('twitter'); ?>" /><?php }function custom_settings_page_setup() { add_settings_section( 'section' , '所有设置', null, '主题选项' ); add_settings_field( 'twitter', 'Twitter 用户名', 'setting_twitter', '主题选项', '部分' ); register_setting( '部分', 'twitter' ); }add_action( 'admin_init', 'custom_settings_page_setup' );
检索字段
回声 get_option( 'twitter' );
修改自使用设置 API 创建 WordPress 主题设置页面。
/** * 删除 WordPress 管理栏 */function remove_admin_bar() { remove_action( 'wp_head', '_admin_bar_bump_cb' ); }add_action( 'get_header', 'remove_admin_bar' );
/** * 添加开放图元标签 */function meta_og() { global $post; if ( is_single() ) { if( has_post_thumbnail( $post->ID ) ) { $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), '缩略图' ); } $摘录 = strip_tags( $post->post_content ); $excerpt_more = ''; if ( strlen($摘录 ) > 155) { $摘录 = substr( $摘录,0,155 ); $excerpt_more = ' ...'; } $excerpt = str_replace( '"', '', $excerpt ); $excerpt = str_replace( "'", '', $excerpt ); $excerptwords = preg_split( '/[nrt ]+/ ', $excerpt, -1, PREG_SPLIT_NO_EMPTY ); ); $excerpt = implode( ' ', $excerptwords ) .><meta name="author" content="你的名字"> <meta name="description" content="<?php echo $excerpt; ?>">"> <meta property="og:title" content="<?php echo the_title(); ?>">"> <meta property="og:description" content="<?php echo $excerpt; ?>">"> <元属性=“og:类型”内容=“文章”> <meta property="og:url" content="<?php echo the_permalink(); ?>">"> <meta property="og:site_name" content="您的网站名称"> <meta property="og:image" content="<?php echo $img_src[0]; ?>"><?php } 否则{ 返回; } }add_action('wp_head', 'meta_og', 5);
/** * 添加自定义帖子类型 */function create_custom_post() { register_post_type( 'custom-post', // 自定义帖子类型的 slug array( 'labels' => array( 'name' => __( 'Custom Post' ), ), '公共' => true, '分层' => true, 'has_archive' => true, '支持' => array( '标题', '编辑器', '摘录', '缩略图' ), 'can_export' => true, 'taxonomies' => array( 'post_tag', 'category' ) )); }add_action('init', 'create_custom_post');
/** * 在主题中实现 Google Fonts 的预连接 */function二十五十五_资源_hints( $urls, $relation_type ) { // 检查主题是否携带 google 字体源,且 `$relation_type` 等于预连接。 // 将`enqueue_font_id`替换为加载源时使用的`ID`。 if ( wp_style_is( 'enqueue_font_id', 'queue' ) && 'preconnect' === $relation_type ) { // 检查 WordPress 版本是否大于或等于 4.7 // 以确保与旧版本兼容 // 因为4.7 必须返回数组而不是字符串 if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { // 带有 url google fonts 和 crossorigin 的数组 $urls[] = array( 'href' => 'https://fonts.gstatic.com', 'crossorigin', ); } else { // 带有 url google fonts 的字符串 $urls[] = 'https://fonts.gstatic.com'; } 返回 $urls; }add_filter( 'wp_resource_hints', 'twentyfifteen_resource_hints', 10, 2 );
/** * 添加缩略图列到帖子列表 */add_image_size( 'admin-list-thumb', 80, 80, false );function wpcs_add_thumbnail_columns( $columns ) { if ( !is_array( $columns ) ) $columns = array(); $new = 数组(); foreach( $columns as $key => $title ) { if ( $key == 'title' ) // 将缩略图列放在标题列之前 $new['featured_thumb'] = __( 'Image'); $new[$key] = $title; 返回 $new; }function wpcs_add_thumbnail_columns_data( $column, $post_id ) { switch ( $column ) { case 'featured_thumb': echo '<a href="' . $post_id . '">'; echo the_post_thumbnail( 'admin-list-thumb' ); 回显'</a>'; 休息; } }if ( function_exists( 'add_theme_support' ) ) { add_filter( 'manage_posts_columns' , 'wpcs_add_thumbnail_columns' ); add_action( 'manage_posts_custom_column' , 'wpcs_add_thumbnail_columns_data', 10, 2 ); }
/** * 将引导类添加到第一段 */function first_paragraph( $content ) { return preg_replace( '/<p([^>]+)?>/', '<p$1 class="lead">', $内容, 1 ); }add_filter( 'the_content', 'first_paragraph' );
将lead
类添加到 the_content 中的第一段。
/** * 从搜索中排除自定义帖子类型 */function exceptPages( $query ) {if ( $query->is_search ) { $query->set( 'post_type', 'post' ); 返回$查询; }add_filter( 'pre_get_posts', 'excludePages' );
/** * 从静态资源中删除查询字符串 */ function remove_cssjs_ver( $src ) { if ( strpos( $src, '?ver=' ) ) $src = remove_query_arg( 'ver', $src ); 返回$src; }add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
/** * 修改 jQuery */function modify_jquery() { wp_deregister_script( 'jquery' ); wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js', false, '3.2.1' ); wp_enqueue_script('jquery'); }if (!is_admin()) add_action('wp_enqueue_scripts', 'modify_jquery');
/** * 从评论表单中禁用网站字段 */functiondisable_website_field( $field ) { if( isset($field['url']) ) { 取消设置( $field['url'] ); 返回$字段; }add_filter('comment_form_default_fields', 'disable_website_field');
/** * 禁用 JSON REST API */add_filter('json_enabled', '__return_false');add_filter('json_jsonp_enabled', '__return_false');
/** * 切换帖子类型 */function switch_post_type ( $old_post_type, $new_post_type ) { global $wpdb; // 运行更新查询 $wpdb->update( $wpdb->posts, // 设置数组( 'post_type' => $new_post_type), // 其中 array( 'post_type' => $old_post_type ) ); }
/** * PHP 记录器 */function php_logger( $data ) { $output = $data; if ( is_array( $output ) ) $output = implode( ',', $output ); // 将结果打印到 JavaScript 控制台 echo "<script>console.log( 'PHP LOG: " . $output . "' );</script>"; }
/** * 在 TinyMCE 中始终显示第二个栏 */function show_tinymce_toolbar( $in ) { $in['wordpress_adv_hidden'] = false; 返回 $in; }add_filter( 'tiny_mce_before_init', 'show_tinymce_toolbar' );
/** * 克隆管理员用户角色 */function clone_admin_role() { global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $adm = $wp_roles->get_role( '管理员' ); // 添加具有所有管理功能的新“客户端”角色 $wp_roles->add_role( 'client', 'Client', $adm->capability ); }add_action( 'init', 'clone_admin_role' );/** * 指定哪些管理菜单项对具有“Client”角色的用户可见 */function remove_dashboard_menus() { if ( current_user_can( 'client' ) ) { // 隐藏仪表板菜单下的更新remove_submenu_page('index.php','update-core.php'); // 隐藏评论 remove_menu_page( 'edit-comments.php' ); // 隐藏插件 remove_menu_page( 'plugins.php' ); // 隐藏外观菜单下的主题、定制器和小部件 remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); remove_submenu_page( 'themes.php', 'widgets.php' ); // 隐藏工具remove_menu_page( 'tools.php' ); // 隐藏常规设置 remove_menu_page( 'options-general.php' ); } }add_action( 'admin_menu', 'remove_dashboard_menus' );
/** * 根据电子邮件地址指定哪些用户可以查看管理菜单项 */function remove_dashboard_menus() { $user_data = get_userdata( get_current_user_id() ); $user_email = isset( $user_data->user_email ) ? $user_data->user_email : ''; if ( ! strpos( $user_email, '@yourcompany.com' ) ) { // 隐藏仪表板菜单下的更新 remove_submenu_page( 'index.php', 'update-core.php' ); // 隐藏评论 remove_menu_page( 'edit-comments.php' ); // 隐藏插件 remove_menu_page( 'plugins.php' ); // 隐藏外观菜单下的主题、定制器和小部件 remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); remove_submenu_page( 'themes.php', 'widgets.php' ); // 隐藏工具remove_menu_page( 'tools.php' ); // 隐藏常规设置 remove_menu_page( 'options-general.php' ); } }add_action( 'admin_menu', 'remove_dashboard_menus' );
/** * 重新排序管理菜单 */function custom_menu_order( $menu_ord ) { if ( ! $menu_ord ) { return true; } } return array( 'index.php', 'separator1', 'edit.php?post_type=page', '编辑.php', 'edit.php?post_type=[your_post_type_slug]', 'upload.php', 'edit-comments.php', 'separator2', 'themes.php', 'plugins.php', 'users.php', '工具.php', '选项-general.php' ); } }add_filter( 'custom_menu_order', 'custom_menu_order' );add_filter( 'menu_order', 'custom_menu_order' );
/** * 从所有 WordPress 循环中排除一个类别 */add_action( 'pre_get_posts', function( $query ) { // 匿名回调 全局 $wp_query; // 硬编码类别 ID,但可以是动态的: esc_attr(get_option('your-cat-id')); $excluded_cat_id = 25; // 将类别 ID 添加到现有的类别 ID,避免覆盖它 $cat[] = $query->get( 'cat' ); $cat[] = "-" 。 $excluded_cat_id; $query->set( '猫', $cat ); } });
add_action('wp_default_scripts', function ($scripts) { if (!empty($scripts->registered['jquery'])) { $scripts->registered['jquery']->deps = array_diff($scripts->注册['jquery']->deps, ['jquery-migrate']); } });
Lighthouse 和类似的性能分析工具总是抱怨渲染阻塞脚本(和样式)、短缓存 TTL 等。这些脚本和样式大多数来自我们无法控制的第三方来源 - Google 自己的标签管理器和分析、Facebook像素、其他跟踪器和聊天脚本等。但是,我们只能在真实用户与页面交互时加载它们,从而显着减少交互时间指标并获得更高的性能结果。
根据您希望这些 3rd 方脚本所在的位置,您可以使用wp_footer
操作在页脚中打印代码,或者将其放入主app.js
脚本中,该脚本又在wp_enqueue_scripts
操作中排队。
<script>var 被解雇= false; window.addEventListener('scroll', () => { if (fired === false) {fired = true; } setTimeout(() => { // 营销脚本放在此处。 }, 1000) // 1000ms 或 1s 效果很好,但您可以调整此超时。 }});</脚本>