管理画面
関連リンク
プラグイン API/アクションフック一覧
Dashicon一覧 - メニューに設定可能なアイコンの一覧。
ログイン直後にダッシュボード以外に遷移
add_action('admin_init', 'custom_index');
function custom_index() {
// global $current_user; // 管理ユーザはダッシュボードを表示する場合はコメントイン
// if ($current_user->roles[0] != 'administrator') {
if ('/wp-admin/index.php' == $_SERVER['SCRIPT_NAME']) {
wp_redirect(admin_url('profile.php')); // プロフィールにリダイレクト
}
// }
}
ダッシュボードから要らんウィジェット削って独自ウィジェットを嵌め込む
function custom_dashboard() { // ウィジェット非表示
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フォーラム
}
wp_add_dashboard_widget('add_widget01', '追加ウィジェット01', 'my_widget01');
}
function my_widget01() {
echo 'Do Anything Here.';
}
add_action('wp_dashboard_setup', 'custom_dashboard');
記事が投稿されたらメールを送る(ステータスが変更された時限定)(確認中)
/**
* $new_stat 変更後ステータス
* $old_stat 変更前ステータス
* $post Postオブジェクト
*/
function my_notice_mail($new_stat, $old_stat, $post)
{
if ('publish' == $new_stat && 'publish' != $old_stat // 公開以外→公開
&& 'post' == $post->post_type) { // 投稿タイプが post カスタム投稿なら適宜修正
$header = ['From: from@example.com'];
wp_mail(
'to@example.com', // 宛先
$post->post_title, // タイトル
get_permalink($post->ID), // 本文
$header // オプションヘッダ
);
}
}
add_action('transition_post_status', 'my_notice_mail', 10, 3);
記事が投稿されたらメールを送る(常時)(確認中)
/**
* $post_id 投稿ID
* $post_after 変更後データ
* $post_before 変更前データ
*/
function my_notice_mail($post_id, $post_after, $post_before)
{
if ('post' == $post_after->post_type) { // 投稿タイプが post
$author = get_userdata($post_after->post_author);
wp_mail(
$author->user_email, // 宛先
$post_after->post_title, // タイトル
get_permalink($post_after->ID) // 本文
);
);
}
add_action('post_updated', 'my_notice_mail');
参考: WP関数『wp_insert_post』に含まれるアクションフック5つ
プロフィールの更新時のフックは profile_update
add_action('profile_update', 'my_profile_update', 10, 2);
function my_profile_update($user_id, $old_user_data) {
// Do something
}
色々非表示
// 管理画面系 ////////////////////////////////////////////////////////////////////////////////
add_filter('pre_site_transient_update_core', '__return_zero'); // バージョン更新を非表示
remove_action('wp_version_check', 'wp_version_check'); // APIによるバージョンチェックの通信をさせない
remove_action('admin_init', '_maybe_update_core');
function remove_admin_bar_menu($wp_admin_bar) { // 管理バーの項目を非表示
$wp_admin_bar->remove_menu('wp-logo'); // WordPressアイコン
$wp_admin_bar->remove_menu('my-account'); // こんにちは、XXXさん!
}
add_action('admin_bar_menu', 'remove_admin_bar_menu', 70);
function my_admin_head() { // 管理バーのヘルプメニューを非表示
echo '<style type="text/css">#contextual-help-link-wrap{display:none;}</style>';
}
add_action('admin_head', 'my_admin_head');
add_filter('admin_footer_text', 'custom_admin_footer_text'); //「WordPress のご利用ありがとうございます。」非表示
function custom_admin_footer_text() {
// echo '表示内容を変更するならメッセージを記述する。';
}
function remove_footer_version() { // バージョン非表示
remove_filter('update_footer', 'core_update_footer');
}
add_action('admin_menu', 'remove_footer_version');
// プロフィール系 ///////////////////////////////////////////////////////////////////////////////
remove_action('admin_color_scheme_picker', 'admin_color_scheme_picker'); // 管理画面の配色 非表示
function profile_js() { // プロフィール欄の不要項目を非表示
echo <<< EOT
<script type="text/javascript">
tftn = "table.form-table:nth-of-type";
jQuery(document).ready(function() {
jQuery("div#profile-page h3").css("display", "none");
jQuery(tftn + "(1)").css("display", "none");
jQuery(tftn + "(2) tr:nth-child(2)").css("display", "none");
jQuery(tftn + "(2) tr:nth-child(3)").css("display", "none");
jQuery(tftn + "(2) tr:nth-child(4)").css("display", "none");
jQuery(tftn + "(2) tr:nth-child(5)").css("display", "none");
jQuery(tftn + "(3) tr:nth-child(2)").css("display", "none");
jQuery(tftn + "(4) tr:nth-child(1)").css("display", "none");
});
</script>
EOT;
}
add_action('show_user_profile', 'profile_js'); // ユーザーのプロフィール
add_action('edit_user_profile', 'profile_js'); // ユーザー一覧からユーザ編集
// 投稿系 ////////////////////////////////////////////////////////////////////////////
add_filter('get_sample_permalink_html', '__return_false'); // パーマリンク、編集 非表示
add_filter('get_shortlink', '__return_false'); // 短縮URLを取得非表示
function show_owned_posts_only($views) {
unset($views['all']); // すべて非表示
unset($views['draft']); // 下書き非表示
unset($views['publish']); // 公開済み非表示
unset($views['pending']); // 保留中非表示
unset($views['trash']); // ゴミ箱非表示
return $views;
}
add_filter('views_edit-post', 'show_owned_posts_only'); // カスタム投稿はpost部分をカスタム投稿のスラッグに変更
// 投稿一覧系 ////////////////////////////////////////////////////////////////////////
// クイック編集を非表示
add_filter('post_row_actions', 'hide_quickedit');
add_filter('page_row_actions', 'hide_quickedit');
function hide_quickedit($actions) {
unset($actions['inline hide-if-no-js']);
return $actions;
}
プロフィールの不要項目削除
function my_user_meta($x)
{
//不要な項目の削除
unset($x['aim']);
unset($x['jabber']);
unset($x['yim']);
unset($x['first_name']);
unset($x['last_name']);
unset($x['display_name']);
//項目の追加
$x['company_name'] = '会社名';
$x['company_name_kana'] = '会社名フリガナ';
$x['user_sex'] = '性別';
return $x;
}
add_filter('user_contactmethods', 'my_user_meta', 10, 1);
他のメンバーの画像を見れないようにする
View Own Posts Media Only か WP Users Media プラグインを使う。
WP Users Media を使ったら権限毎に見れる見れないが設定できた。
管理画面にスタイル適用
管理者以外のユーザに独自のCSSを読込む
//管理者以外のユーザに独自のcssを読み込む
if (!current_user_can('administrator')) {
function wp_custom_admin_css() {
echo "\n" . '<link rel="stylesheet" type="text/css" href="' .get_bloginfo('template_directory'). '/css/custom-admin-css.css' . '" />' . "\n";
}
add_action('admin_head', 'wp_custom_admin_css', 100);
}
/* アドミンメニュー非表示 */
# adminmenuback,
# adminmenu,
# contextual-help-link-wrap,
# screen-options-link-wrap {
display:none;
}
# wpcontent {
margin-left:0;
clear:both;
}
WordPressの管理画面をカスタマイズする時に使えるハック
WordPress 全般
php からショートコードを実行する。
echo do_shortcode('[shortcode params=params]');
カスタム投稿
追加
add_action('init', 'create_post_type');
function create_post_type() {
register_post_type(
'news', // 投稿タイプ名(スラッグ)
array(
'labels' => array(
'name' => __('新着情報'), // 投稿タイプ名(複数)
'singular_name' => __('新着情報'), // (単数)
),
// 'label' => __('新着情報'), // 複数形がなければこれでもOK
'public' => true, // 管理画面に表示
'has_archive' => true // アーカイブページをアクセス可能にする。
'menu_position' => 5, // 5:投稿の下, 10:メディアの下, 20:固定ページの下
// 'exclude_from_search' => true, // 検索結果に含まないようにするには true を設定
// 'hierarchical' => true, // 親記事を指定する場合は true 通常は省略
// 'supports' => array( // 省略時の初期値は 'title', 'editor',
// 'title', // タイトル
// 'editor', // 本文のエディタ
// 'author', // 作成者
// 'thumbnail', // アイキャッチ画像
// 'excerpt', // 抜粋
// 'trackbacks', // トラックバック送信
// 'custom-fields', // カスタムフィールド
// 'comments', // ディスカッション
// 'revisions', // リビジョン
// 'page-attributes', // 属性(親・順序)
// ),
)
);
}
※ ちなみにこれで作ると Types で認識してくれないので注意。
Types 側で エクスポート/インポートはできるけど・・・。方法求む。
投稿の下にカスタム投稿タイプを5個以上追加するとメディアの下に回る対策(どうやらうまく動かない)
実行順番が問題?
投稿が $menu[5]、メディアが $menu[10]、固定ページが $menu[20] に設定されている。メディアを $menu[19] にコピーして、$menu[10] をクリアすることで、5~18 までカスタム投稿タイプを設定できる。
function customize_menus(){
global $menu;
$menu[19] = $menu[10]; //メディアの移動
unset($menu[10]);
}
add_action('admin_menu', 'customize_menus');
カスタム投稿限定検索フォーム
<form method="get" id="testSearch" action="<?php echo home_url('/'); ?>">
<input type="text" name="s" id="testSearchInput" value="<?php the_search_query(); ?>" placeholder="カスタム投稿タイプ別検索" />
<input type="hidden" name="post_type" value="test">
<input type="submit" value="search" accesskey="f" />
</form>
カスタム投稿一覧にフィールドを追加する。
プラグインAPI /フィルタリファレンス/ $ post type posts columnsを管理する
特定のフィールドを置き換えるなら
// カスタム投稿タイプ book の投稿一覧で 追加した著者名のカラムでその投稿のカスタムフィールド book_author_name を表示
add_action('manage_book_posts_custom_column', 'custom_book_column', 10, 2);
function custom_book_column($column, $post_id) {
switch ($column) {
case 'book_author' :
echo get_post_meta($post_id, 'book_author_name', true);
break;
}
}
登録通知メール等の内容を変更する
Theme My Loginプラグインを使用する。☑ Custom E-mailを有効にする。
後は設定画面からメールの内容を修正する。
テーマ
カスタマイズしやすいテーマ bones
プラグイン
Toolset
いろいろ部品を隠す投稿画面の Types ボタンを隠す
add_action('admin_print_styles', 'hide_buttons', 100);
function hide_buttons() {
?>
<style type="text/css">
.wp-media-buttons .wpv-shortcode-post-icon { display:none } /* 投稿画面の Typesボタンを隠す */
.types-table-in-meta-box { display:none } /* フロントエンドディスプレイを隠す */
</style>
<?php
}
親投稿のIDを取得する。
Post繋がりの情報はメタ情報に保持されているので、以下で取得する。
$parentId = get_post_meta($id, "_wpcf_belongs_親投稿のスラグ_id, true);
ユーザ名で使用可能な文字
半角英数、-(ハイフン)、_(アンダーバー)、@
nginx
wp super cache 設定
/etc/nginx/conf.d/default.conf に Nginx の WP Super Cacheのルールを追記する。
面白そうなプラグイン
CubePoints 投稿にポイントを付与する。
Events Manager 場所やイベント登録して予約などもできるイベント管理
Barcode Reception バーコードで受付処理を実施する。
WordPressデータベース構造
WordPressを100倍速くする! MySQLの調整やnginx proxy cache
初心者向けWordPress DB & Performance