WordPress functions.phpに記述しておいたほうがいい あれこれ

functions.phpに記述しておいたほうがいいコードをいくつか紹介しよう。

どのようなサイトを構築するにあたっても(多くの場合)記述しておいたほうがいいと思われるものを、厳選して紹介していく。

WordPressに関して、テーマに関して

jQuery Migrate プラグインを読み込まない

function dequeue_jquery_migrate($scripts){
 if(!is_admin()){
  $scripts->remove('jquery');
  $scripts->add('jquery',false,array('jquery-core'),'1.10.2');
 }
}
add_filter('wp_default_scripts','dequeue_jquery_migrate');

WordPressのバージョン番号を削除

function remove_src_wp_ver($dep){
 $dep->default_version = '';
}
add_action('wp_default_scripts','remove_src_wp_ver');
add_action('wp_default_styles','remove_src_wp_ver');

テーマの更新通知をしない

remove_action('load-update-core.php','wp_update_themes');
add_filter('pre_site_transient_update_themes',create_function('$a',"return null;"));

管理画面をカスタマイズ

カテゴリーを1つしか選択させない

function limit_category_select() {
?>
 <script type="text/javascript">
  jQuery(function($) {
   // 投稿画面のカテゴリー選択を制限
   var cat_checklist = $('.categorychecklist input[type=checkbox]');
   cat_checklist.click( function() {
    $(this).parents('.categorychecklist').find('input[type=checkbox]').attr('checked', false);
    $(this).attr('checked', true);
   });

   // クイック編集のカテゴリー選択を制限
   var quickedit_cat_checklist = $('.cat-checklist input[type=checkbox]');
   quickedit_cat_checklist.click( function() {
    $(this).parents('.cat-checklist').find('input[type=checkbox]').attr('checked', false);
    $(this).attr('checked', true);
   });

   $('.categorychecklist>li:first-child, .cat-checklist>li:first-child').before('<p style="padding-top:5px;">カテゴリーは1つしか選択できません</p>');
  });
 </script>
<?php
}
add_action('admin_print_footer_scripts','limit_category_select');

「タグ」をなくす

function my_unregister_taxonomies() {
 global $wp_taxonomies;
 if (!empty($wp_taxonomies['post_tag']->object_type)) {
  foreach ($wp_taxonomies['post_tag']->object_type as $i => $object_type) {
   if ($object_type == 'post') {
    unset($wp_taxonomies['post_tag']->object_type[$i]);
   }
  }
 }
 return true;
}
add_action('init','my_unregister_taxonomies');

アドミンバーを非表示に

add_filter('show_admin_bar', '__return_false');

メニューの一部を非表示に

function remove_admin_menu() {
 remove_menu_page('link-manager.php');//リンク
 remove_menu_page('edit-comments.php');// コメント
}
add_action('admin_menu','remove_admin_menu',999);

メニューの順番入れ替え

function custom_menu_order($menu_old) {
 if (!$menu_old) return true;

 return array(
  'index.php',//ダッシュボード
  'separator1',//区切り線

  'edit.php',//投稿
  'upload.php',//メディア
  'edit.php?post_type=page',//固定ページ
  'separator2',//区切り線

  'themes.php',//テーマ
  'plugins.php',//プラグイン
  'users.php',//ユーザー
  'tools.php',//ツール
  'options-general.php',//設定
  'separator-last',//区切り線
 );
}
add_filter('custom_menu_order','custom_menu_order');
add_filter('menu_order','custom_menu_order',999);

わかりやすい文言に変える

function custom_gettext_translation($translation){
 $translation = str_ireplace('メディア','画像',$translation);
 $translation = str_ireplace('パーマリンク:','記事URL:',$translation);
 $translation = str_ireplace('固定ページ','全ページ',$translation);
 $translation = str_ireplace('お問い合わせ','問合せフォーム',$translation);
 return $translation;
}
add_filter('gettext','custom_gettext_translation');

function custom_gettext_with_context_translation( $translation ) {
 $translation = str_ireplace( 'アイキャッチ','サムネイル',$translation );
 $translation = str_ireplace( '投稿','最新情報',$translation );
 $translation = str_ireplace( '固定ページ','全ページ',$translation );
 return $translation;
}
add_filter('gettext_with_context','custom_gettext_with_context_translation');

投稿・固定ページのメタボックスを非表示に

function remove_default_post_screen_metaboxes(){
 remove_meta_box('postexcerpt','post','normal');//抜粋
 remove_meta_box('trackbacksdiv','post','normal');//トラックバック送信
 remove_meta_box('commentstatusdiv','post','normal');//ディスカッション
 remove_meta_box('commentsdiv','post','normal');//コメント
 remove_meta_box('slugdiv','post','normal');//スラッグ
 remove_meta_box('authordiv','post','normal');//作成者
 remove_meta_box('revisionsdiv','post','normal');//リビジョン
 remove_meta_box('formatdiv','post','normal');//フォーマット
}
add_action('admin_menu','remove_default_post_screen_metaboxes',999);

function remove_default_page_screen_metaboxes(){
 remove_meta_box('commentstatusdiv','page','normal');//ディスカッション
 remove_meta_box('commentsdiv','page','normal');//コメント
 remove_meta_box('slugdiv','page','normal');//スラッグ
 remove_meta_box('authordiv','page','normal');//作成者
 remove_meta_box('revisionsdiv','page','normal');//リビジョン
}
add_action('admin_menu','remove_default_page_screen_metaboxes',999);

操作マニュアル

function page_manual(){
?>
<div class="wrapper">
 <h1>操作マニュアル</h1>
 <p>本サイトはWordPressというコンテンツ管理システムをベースに構築されています。<br>
 以下、WordPress管理画面の簡単な操作説明をさせていただきます。</p>

 <div style="border:1px solid #ddd;background:#fff;margin:16px 16px 16px 0;padding:8px 16px;">
  <h2 style="margin:12px 0 0;">はじめに</h2>
  <p>・操作マニュアルをここに記載します。操作マニュアルをここに記載します。操作マニュアルをここに記載します。<br>
  ・操作マニュアルをここに記載します。操作マニュアルをここに記載します。操作マニュアルをここに記載します。操作マニュアルをここに記載します。操作マニュアルをここに記載します。</p>
 </div>
</div>
<?php
}
function page_manuals(){
 add_menu_page('操作マニュアル','操作マニュアル','manage_options','manual','page_manual','',1);
}
add_action('admin_menu','page_manuals');

固定ページ編集画面に注意書き

function page_attention($post){
 if($post->post_type == "page"){
  ?>
   <div style="border:1px solid #ddd;background:#fff;margin:24px 0;padding:8px 16px;">
    <h3>固定ページ編集画面に注意書き</h3>
    <p style="margin:0 0 24px;">・注意書きをここに記載します。注意書きをここに記載します。<br>
    注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。<br>
    注意書きをここに記載します。注意書きをここに記載します。</p>

    <p style="margin:0 0 24px;">・注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。<br>
    注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。注意書きをここに記載します。</p>
   </div>
  <?php
 }
}
add_action('edit_form_after_editor',page_attention);

固定ページ編集時にビジュアルエディタを非表示にする

function disable_visual_editor_in_page(){
 global $typenow;
 if( $typenow == 'page' ){
  add_filter('user_can_richedit', 'disable_visual_editor_filter');
 }
}
function disable_visual_editor_filter(){
 return false;
}
add_action( 'load-post.php', 'disable_visual_editor_in_page' );
add_action( 'load-post-new.php', 'disable_visual_editor_in_page' );

管理画面の投稿一覧画面に「アイキャッチ画像」を表示

function customize_manage_posts_columns($columns) {
 $columns['thumbnail'] = __('Thumbnail');
 return $columns;
}
add_filter('manage_posts_columns','customize_manage_posts_columns');

function customize_manage_posts_custom_column($column_name, $post_id) {
 if ('thumbnail' == $column_name) {
  $thum = get_the_post_thumbnail($post_id,'small',array('style'=>'width:64px;height:auto;'));
 } if ( isset($thum) && $thum ) {
  echo $thum;
 } else {
  echo __('None');
 }
}
add_action('manage_posts_custom_column','customize_manage_posts_custom_column',10,2);

追加機能

セルフピンバックをオフに

function no_self_ping( &$links ) {
 $home = home_url();
 foreach ( $links as $l => $link )
  if ( 0 === strpos( $link, $home ) )
   unset($links[$l]);
 }
add_action( 'pre_ping', 'off_self_ping' );

検索結果から、固定ページを除く

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