そのまま使えるWordPressのアクションフックまとめ

前回に続きWordPress関連です。
特に目新しい内容でもありませんが、まとまっていると便利だろうという事で
わりとよく使うアクションフックをまとめてみました。

wpのバージョン関連

余計なアップデート通知はお客様に余計な心配を与えてしまうので非表示にします。

[php]
// バージョン更新を非表示にする
add_filter(‘pre_site_transient_update_core’, ‘__return_zero’);

// APIによるバージョンチェックの通信をさせない
remove_action(‘wp_version_check’, ‘wp_version_check’);
remove_action(‘admin_init’, ‘_maybe_update_core’);
[/php]

メニューの表示関連

管理者アカウントだけ表示されて、それ以外はには余計なメニューを見せたくない、というときにどうぞ。
それぞれ行頭のコメントを外すと有効(メニューが非表示)されます。

[php]
// ダッシュボードウィジェット非表示
function example_remove_dashboard_widgets()
{
//level10以下のユーザーの場合ウィジェットをunsetする
if (!current_user_can(‘level_10’)) {
global $wp_meta_boxes;
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_right_now’]); // 現在の状況
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_recent_comments’]); // 最近のコメント
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_incoming_links’]); // 被リンク
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_plugins’]); // プラグイン
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_quick_press’]); // クイック投稿
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_recent_drafts’]); // 最近の下書き
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_primary’]); // WordPressブログ
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_secondary’]); // WordPressフォーラム
}
}
add_action(‘wp_dashboard_setup’, ‘example_remove_dashboard_widgets’);

// メニューを非表示にする
function remove_menus()
{
//level10以下のユーザーの場合メニューをunsetする
if (!current_user_can(‘level_10’)) {
global $menu;
// unset($menu[2]); // ダッシュボード
// unset($menu[4]); // メニューの線1
// unset($menu[5]); // 投稿
// unset($menu[10]); // メディア
// unset($menu[15]); // リンク
// unset($menu[20]); // ページ
// unset($menu[25]); // コメント
// unset($menu[59]); // メニューの線2
// unset($menu[60]); // テーマ
// unset($menu[65]); // プラグイン
// unset($menu[70]); // プロフィール
// unset($menu[75]); // ツール
// unset($menu[80]); // 設定
// unset($menu[90]); // メニューの線3
}
}
add_action(‘admin_menu’, ‘remove_menus’);

// 投稿画面のメニューを非表示にする
function remove_edit_menus()
{
//level10以下のユーザーの場合メニューをunsetする
if (!current_user_can(‘level_10’)) {
global $menu;
// remove_meta_box(‘postexcerpt’,’post’,’normal’); // 抜粋
// remove_meta_box(‘trackbacksdiv’,’post’,’normal’); // トラックバック送信
// remove_meta_box(‘postcustom’,’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’); // フォーマット
// remove_meta_box(‘categorydiv’,’post’,’normal’); // カテゴリー
}
}
add_action(‘admin_menu’, ‘remove_edit_menus’);
[/php]

ユーザー別制御関連

例えば複数のユーザが記事を投稿していて、別のユーザが作成した記事は一切触らせたくない場合のアクションフック。
こちらも管理者権限は全て見れるようにしています。

[php]
// 他ユーザーの作成した記事を非表示にする
function exclude_other_posts($wp_query)
{
//level10以下のユーザーの場合メニューをunsetする
if (!current_user_can(‘level_10’)) {
if (isset($_REQUEST[‘post_type’]) && post_type_exists($_REQUEST[‘post_type’])) {
$post_type = get_post_type_object($_REQUEST[‘post_type’]);
$cap_type = $post_type->cap->edit_other_posts;
} else {
$cap_type = ‘edit_others_posts’;
}

if (is_admin() && $wp_query->is_main_query() && ! $wp_query->get(‘author’) && ! current_user_can($cap_type)) {
$user = wp_get_current_user();
$wp_query->set(‘author’, $user->ID);
}
}
}
add_action(‘pre_get_posts’, ‘exclude_other_posts’);
[/php]

例えば会員制サイトとしてWPを利用していて、
一般ユーザには管理画面のログインは出来なくしたい場合などには
ログイン成功後に強制的に指定のURLへリダイレクトさせる。
この場合は購読者権限に限定しています。

[php]
// 購読者ユーザの場合はWordPress管理画面へのログインを出来なくする
function disable_admin_pages() {
if (!current_user_can(‘level_1’)) {
// $redirect_url = get_option(‘home’);
$redirect_url = ‘/path/to/redirect’;
header("Location: ".$redirect_url);
exit;
}
}
add_action( ‘admin_init’, ‘disable_admin_pages’ );
[/php]

エディタ関連

デザインの都合上使ってほしくないタグなどをビジュアルエディタで無効にしたい場合。

[php]
// エディタの文字強調を<strong>ではなく<span>に変える
function convertStrongToSpan($content) {
$content = str_replace(‘<strong>’, ‘<span style="font-weight: bold;">’, $content);
$content = str_replace(‘</strong>’, ‘</span>’, $content);
return $content;
}
add_action(‘the_content’, ‘convertStrongToSpan’);

function custom_editor_settings( $initArray ){
$initArray[‘theme_advanced_blockformats’] = ‘p,address,pre,code,h1,h2’;
return $initArray;
}
// add_filter(‘tiny_mce_before_init’, ‘custom_editor_settings’);
[/php]