這是一個有用的 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_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 ); array_pop( $excerptwords ); $excerpt = implode( ' ', $excerpt_more ?><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 字體和跨來源的陣列$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 等。其他追蹤器和聊天腳本等。
根據您希望這些 3rd 方腳本所在的位置,您可以使用wp_footer
操作在頁腳中列印程式碼,或者將其放入主app.js
腳本中,該腳本又在wp_enqueue_scripts
操作中排隊。
<script>var 被解僱= false; window.addEventListener('scroll', () => { if (fired === false) {fired = true; } setTimeout(() => { // 行銷腳本放在這裡。 }, 1000) // 1000ms 或 1s 效果很好,但您可以調整此逾時。 }});</腳本>