これは、サイトを強化したりクリーンアップするために私がよく参照する便利な WordPress 機能のリストです。注意してバックアップを取ってください。
WordPress の更新を管理者以外の全員に通知しないようにする
適切な WordPress タイトルを使用する
カスタム WordPress ダッシュボード ウィジェットを作成する
すべてのダッシュボード ウィジェットを削除する
ナビゲーションメニューを含める
カスタムログインロゴを挿入
管理フッターテキストの変更
エンキュースタイルとスクリプト
Google Fontをキューに入れる
抜粋の長さを変更する
続きを読むリンクを変更する
さらに変更の抜粋
絵文字の混乱を無効にする
コメントの削除
メディアギャラリーのURLを変更する
カスタムサムネイルサイズの作成
添付ファイルのカテゴリを追加する
添付ファイルのタグを追加する
カスタムの抜粋をページに追加する
グローバル文字列を作成する
注目の画像をサポート
サポート検索フォーム
検索からページを除外する
XMLRPC を無効にする
投稿内の HTML をエスケープする
カスタムグローバル設定の作成
WordPress 管理バーを削除する
オープングラフメタタグの追加
カスタム投稿タイプの追加
テーマに Google フォントへの事前接続を実装する
投稿リストにサムネイル列を追加
最初の段落にリードクラスを追加
カスタム投稿タイプを検索から除外する
静的リソースからクエリ文字列を削除する
コメントフォームのウェブサイトフィールドを無効にする
jQueryを変更する
JSON Rest APIを無効にする
スイッチポストタイプ
PHP ロガー
TinyMCE では常に 2 番目のバーを表示します
ユーザーの役割に応じて管理者メニュー項目を削除する
メールアドレス(ドメイン)に応じて管理者メニュー項目を削除する
管理者メニュー項目の並べ替え
WordPress ループからカテゴリーを除外する
「JQMIGRATE: Migrate がインストールされています、バージョン 1.4.1」というメッセージを無効にします。
パフォーマンスを向上させるために、重いサードパーティ製スクリプトを後でロードします
/** * 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 crashboard_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; unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments'] ); unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] ); unset( $wp_meta_boxes['ダッシュボード']['サイド']['コア']['ダッシュボード_セカンダリ'] ); Remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' ); }add_action( 'wp_dashboard_setup', 'remove_dashboard_widgets' );
/** * ナビゲーション メニューを含めます */function register_my_menu() { register_nav_menu( 'nav-menu', __( 'Navigation Menu' ) ); }add_action( 'init', 'register_my_menu' );
これを表示したい場所に挿入し、 「外観 -> メニュー」でメニューを保存します。
wp_nav_menu( array( 'テーマの場所' => 'nav-menu' ) );
複数のメニューのコードは次のとおりです。
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) !重要; 背景サイズ: 234px 67px; 幅:234ピクセル; 高さ:67ピクセル; 表示:ブロック; } </style> '; }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 Fontsをキューに入れる */ 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' );
/** * 絵文字の混乱を無効にする */ function disable_wp_emojicons() { Remove_action( 'admin_print_styles', 'print_emoji_styles' ); Remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); Remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); Remove_action( 'wp_print_styles', 'print_emoji_styles' ); Remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); Remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); Remove_filter( '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' );function disable_emojicons_tinymce( $plugins ) { return is_array( $plugins ) ? array_diff( $plugins, array( 'wpemoji' ) ) : array(); }
/** * コメントを削除します */ // 管理者メニュー関数から削除 my_remove_admin_menus() { Remove_menu_page( 'edit-comments.php' ); }add_action( 'admin_menu', 'my_remove_admin_menus' );// 投稿とページから削除functionremove_comment_support() {remove_post_type_support( 'post', 'comments' ); Remove_post_type_support( 'ページ', 'コメント' ); }add_action( 'init', 'remove_comment_support', 100 );// 管理バー関数から削除 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), 'custom-thumbnail' );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 exclude_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 をエスケープします。 */ functionscapeHTML($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)) { $arr[1] を返します。 $output 。 $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="ラップ"> <h1>カスタム設定</h1> <form method="post" action="options.php"> <?php settings_fields( 'section' ); do_settings_sections( 'テーマオプション' ); submit_button(); ?> </form> </div><?php }function custom_settings_add_menu() { add_theme_page( 'カスタム設定', 'カスタム設定', 'manage_options', 'custom-settings', 'custom_settings_page', null, 99 ); }add_action( 'admin_menu', 'custom_settings_add_menu' );// 設定関数の例 settings_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( 'セクション', 'ツイッター' ); }add_action( 'admin_init', 'custom_settings_page_setup' );
フィールドの取得
echo 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 ), 'thumbnail' ); } $excerpt = ストリップタグ( $post->post_content ); $excerpt_more = ''; if ( strlen($excerpt ) > 155) { $excerpt = substr( $excerpt,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; ?>"> <meta property="og:type" content="article"> <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 } else { 戻り値; } }add_action('wp_head', 'meta_og', 5);
/** * カスタム投稿タイプを追加します */function create_custom_post() { register_post_type( 'custom-post', // カスタム投稿タイプのスラッグ array( 'labels' => array( 'name' => __( 'Custom Post' )、 )、'public' => true、'hierarchical' => true、 'has_archive' => true, 'supports' => array( 'タイトル', 'エディタ', '抜粋', 'サムネイル' )、 'can_export' => true, 'taxonomy' => array( 'post_tag', 'category' ) )); }add_action('init', 'create_custom_post');
/** * テーマに Google フォントへの事前接続を実装する */function Twentyfifteen_resource_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 { // Google フォントの URL を含む文字列 $urls[] = 'https://fonts.gstatic.com'; } $url を返します。 }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">', $content, 1 ); }add_filter( 'the_content', 'first_paragraph' );
the_content の最初の段落にlead
クラスを追加します。
/** * カスタム投稿タイプを検索から除外します */function excludePages( $query ) {if ( $query->is_search ) { $query->set( 'post_type', 'post' ); $queryを返します。 }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');
/** * コメントフォームから Web サイトフィールドを無効にする */function disable_website_field( $field ) { if( isset($field['url']) ) { unset( $field['url'] ); $field を返します。 }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, // Set array( 'post_type' => $new_post_type), // Where 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 では常に 2 番目のバーを表示 */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->capabilities ); }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' ); // 外観メニューのテーマ、カスタマイザー、ウィジェットを非表示にする delete_submenu_page( 'themes.php', 'themes.php' ); Remove_submenu_page( '主題.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); Remove_submenu_page( '主題.php', 'ウィジェット.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' ) ) { // ダッシュボード メニューの更新を非表示にする delete_submenu_page( 'index.php', 'update-core.php' ); // コメントを非表示にするremove_menu_page( 'edit-comments.php' ); // プラグインを非表示にするremove_menu_page( 'plugins.php' ); // 外観メニューのテーマ、カスタマイザー、ウィジェットを非表示にする delete_submenu_page( 'themes.php', 'themes.php' ); Remove_submenu_page( '主題.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); Remove_submenu_page( '主題.php', 'ウィジェット.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', 'edit.php', 'edit.php?post_type=[your_post_type_slug]'、'upload.php'、'edit-comments.php'、'separator2'、'themes.php'、'plugins.php'、'users.php'、'tools .php'、'options-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', $cat ); } });
add_action('wp_default_scripts', function ($scripts) { if (!empty($scripts->registered['jquery'])) { $scripts->registered['jquery']->deps = array_diff($scripts-> registered['jquery']->deps, ['jquery-移行']); } });
Lighthouse や同様のパフォーマンス分析ツールは、常にレンダリング ブロック スクリプト (およびスタイル)、短いキャッシュ TTL などについて不平を言います。これらのスクリプトやスタイルのほとんどは、Google 独自のタグ マネージャーやアナリティクス、Facebook など、私たちが制御できないサードパーティのソースから来ています。ピクセル、その他のトラッカー、チャット スクリプトなど。ただし、実際のユーザーがページを操作する場合にのみロードできるため、インタラクティブまでの時間の指標が大幅に短縮され、より高いパフォーマンス結果が得られます。
これらのサードパーティのスクリプトをどこに配置するかに応じて、 wp_footer
アクションを使用してコードをフッターに出力するか、メインのapp.js
スクリプトにコードを配置し、 wp_enqueue_scripts
アクションのキューに入れることができます。
<script>var fireed = false; window.addEventListener('scroll', () => { if (fired === false) { fired = true; setTimeout(() => { // マーケティング スクリプトはここにあります。 }, 1000) // 1000 ミリ秒または 1 秒でも問題なく動作しますが、このタイムアウトは調整できます。 }});</script>