【プラグイン不要】functions.php にコピペでOK!覚えておくと便利な WordPress 小技集

目次

投稿者アーカイブページ → 404へリダイレクトする

https://example.com/?author=1にアクセスした際、投稿者アーカイブページではなくhttps://example.com/404/にリダイレクトします。

function author_archive_redirect() {
    if($_GET['author'] !== null) {
        wp_redirect( home_url('/404/') );
        exit;
    }
}
add_action('init', 'author_archive_redirect');

Emoji(絵文字)機能を無効化する

function disable_emojis() {
    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_action( 'admin_print_styles', 'print_emoji_styles' );
    remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
}
add_action( 'init', 'disable_emojis' );

自動整形機能を無効化する

<p>タグ、<br>タグの自動挿入を無効化します。

remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

固定ページだけ無効化するならこちら。

function disable_page_wpautop() {
    if ( is_page() ) remove_filter( 'the_content', 'wpautop' );
}
add_action( 'wp', 'disable_page_wpautop' );

投稿・固定ページで PHPファイルを有効化する

ショートコードで PHPファイルを読み込めるようになります。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(get_theme_root() . '/' . get_template() . "/$file.php");
    return ob_get_clean();
}
add_shortcode('myphp', 'Include_my_php');

ウィジェットでショートコードを使えるようにする

add_filter('widget_text', 'do_shortcode' );

メディアライブラリに SVG 形式の画像をアップロードできるようにする

add_filter('upload_mimes', 'set_mime_types');
function set_mime_types($mimes) {
    $mimes['svg'] = 'image/svg+xml';
    return $mimes;
}

画像を <p>タグで囲まないようにする

<img>タグを<p>タグで囲まないようにします。

function filter_ptags_on_images($content) {
    return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}
add_filter('the_content', 'filter_ptags_on_images');

検索結果から固定ページを除外する

検索結果に投稿だけ表示されるようになります。

function SearchFilter($query) {
    if (!is_admin() && $query->is_search()) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_action( 'pre_get_posts','SearchFilter' );

ログイン画面のロゴを変更する

画像は imagesフォルダにアップロードするか、echo以降を修正して下さい。

function custom_login_logo() {
    echo '<style type="text/css">h1 a { background: url(' . get_bloginfo( 'template_directory' ) . '/images/login-logo.png) no-repeat center center !important; }</style>';
}
add_action( 'login_head', 'custom_login_logo' );

ダッシュボード内の不要なメニューを非表示にする

function remove_menu() {
    remove_menu_page( 'index.php' );                // ダッシュボード
    remove_menu_page( 'edit.php' );                 // 投稿
    remove_menu_page( 'upload.php' );               // メディア
    remove_menu_page( 'link-manager.php' );         // リンク
    remove_menu_page( 'edit.php?post_type=page' );  // 固定ページ
    remove_menu_page( 'edit-comments.php' );        // コメント
    remove_menu_page( 'themes.php' );               // 外観
    remove_menu_page( 'plugins.php' );              // プラグイン
    remove_menu_page( 'users.php' );                // ユーザー
    remove_menu_page( 'tools.php' );                // ツール
    remove_menu_page( 'options-general.php' );      // 設定
}
add_action( 'admin_menu', 'remove_menu', 999 );

rel= “noreferrer” を削除する

target="_blank"に付与されるrel="noreferrer"を削除します。
WordPress 5.1 以降。

add_filter('tiny_mce_before_init','tinymce_allow_unsafe_link_target_demo');
function tinymce_allow_unsafe_link_target_demo( $mce_init ) {
    $mce_init['allow_unsafe_link_target']=true;
    return $mce_init;
}
add_filter( 'wp_targeted_link_rel', 'wp_targeted_link_rel_custom_demo', 10, 2 );
function wp_targeted_link_rel_custom_demo( $rel_value, $link_html ){
    $rel_value = str_replace(' noreferrer', '', $rel_value);
    return $rel_value;
}