3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPress Tips(執筆中)

Last updated at Posted at 2018-09-12

管理画面

関連リンク

プラグイン API/アクションフック一覧
Dashicon一覧 - メニューに設定可能なアイコンの一覧。

ログイン直後にダッシュボード以外に遷移

function.php
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.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');

記事が投稿されたらメールを送る(ステータスが変更された時限定)(確認中)

function.php
/**
 * $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);

記事が投稿されたらメールを送る(常時)(確認中)

function.php
/**
 * $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

function.php
add_action('profile_update', 'my_profile_update', 10, 2);
function my_profile_update($user_id, $old_user_data) {
   // Do something
}

色々非表示

function.php
// 管理画面系 ////////////////////////////////////////////////////////////////////////////////
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.php
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を読込む

function.php
//管理者以外のユーザに独自の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);
}
custom-admin-css.css
/* アドミンメニュー非表示 */
# adminmenuback,
# adminmenu,
# contextual-help-link-wrap,
# screen-options-link-wrap {
    display:none;
}
# wpcontent {
    margin-left:0;
    clear:both;
}

管理者以外のユーザに独自のcssを読み込む

WordPressの管理画面をカスタマイズする時に使えるハック

Part 1
Part 2
Part 3

WordPress 全般

php からショートコードを実行する。

php
    echo do_shortcode('[shortcode params=params]');

カスタム投稿

追加

function.php
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.php
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を管理する
特定のフィールドを置き換えるなら

function.php
// カスタム投稿タイプ 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 ボタンを隠す

function.php
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繋がりの情報はメタ情報に保持されているので、以下で取得する。

function.php
$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

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?