WP管理画面に簡易カスタムメニュー/オプション追加する(functionにコピペ用)

wordpress

概要

WPカスタムで簡単な独自オプション追加+管理画面作成みたいな案件に出くわし

調べてたら案外とサクっとfunction.phpにコピペで済みそうな内容がなかったのでコピペ用に

少しコメント入れてつつので作成してみます。

わざわざプラグイン作る程でもなく、1,2個独自でオプション持ちたい。

ぐらいの内容のつもりです。

function.phpにコピペで使える。ハズです。

普段仕事ではjs触るのがメインな方なので、適当な所も結構多いと思いますが

とりあえず動作は問題ないはずです。

多分キチっと作るならばplugin/クラスベースで作成するのがお作法っぽい?気がします。

作った事ないから知らんけど。

今回は冒頭にも書きましたがとりあえずfunction.phpにコピペでサクッと使う用です。

function.phpコピペ用ソース全文

<?php
## ================================== 管理画面側 ================================== ##
add_action( 'admin_menu', 'my_custom' );
function my_custom() {
    add_menu_page(
        __( 'カスタム設定'), //メニューが選択されたとき、ページのタイトルタグに表示されるテキスト。
        __( 'カスタム設定'), //メニューとして表示されるテキスト
        'manage_options', //メニューを表示するために必要な権限。
        'my_custom', //メニューのスラッグ名
        'my_custom_option' , //メニューページを表示する際に実行される関数
        'dashicons-admin-customizer', //メニューのアイコンを示す URL https://elearn.jp/wpman/column/c20170626_01.htmlがわかりやすいです。
        5 // メニューが表示される位置。
    );
}
function my_custom_option() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'あんさんには権限があらへんさかい、おいそれとは見せられまへんな' ) );
    }
    $opt_name = 'my_custom';
    $hidden_field_name = 'submit_hidden';
    $data_field_name = 'my_custom';

    $opt_val = get_option( $opt_name );
    echo "<h2>" . __( 'カスタム設定') . "</h2>";
    ?>
    <?php
    ## ================================== UPDATE ================================== ##
    if( isset($_POST[ $hidden_field_name ]) && $_POST[ $hidden_field_name ] == 'Y' ) :
        $opt_val = $_POST[ $data_field_name ];
        update_option( $opt_name, $opt_val );
        ?>
        <div class="updated">
            <p>
                <strong>
                    <?php echo __("カスタムオプションを変更しました。"); ?><br>
                </strong>
            </p>
        </div>
        <?php
    endif;
    ## ================================== EDIT ================================== ##
    ?>
    <div class="wrap">
        <form method="post">
            <input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
            <hr />
            <h3>カスタムオプションを選択してください</h3>
            <div>
                <input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo ($opt_val) ? $opt_val:'default'; ?>">
            </div>
            <hr />
            <div class="submit">
                <input type="submit" name="Submit" class="button-primary" value="<?php esc_attr_e('Save Changes') ?>" />
            </div>
        </form>
    </div>
<?php
} // my_custom_optionのとじタグでっせ
## ================================== 表示側 ================================== ##
add_action( 'get_header', 'my_custom_param');
function my_custom_param() {
    $opt_name = 'my_custom';
    $param = get_option( $opt_name,'default' );
    define("MY_OPTION", $param);
    // echo MY_OPTION; // とかで使える
}
?>

参照サイトや軽い説明等

上記コピペはとりあえずサクッと動けばいいよって方向むけです。

下記参照にさせていただきました。

勤勉な方は多分こっち見た方詳細とかが色々書いてると思います。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_menu_page

add_menu_page

add_action( 'admin_menu', 'my_custom' );
function my_custom() {
    add_menu_page(
        __( 'カスタム設定'), //メニューが選択されたとき、ページのタイトルタグに表示されるテキスト。
        __( 'カスタム設定'), //メニューとして表示されるテキスト
        'manage_options', //メニューを表示するために必要な権限。
        'my_custom', //メニューのスラッグ名
        'my_custom_option' , //メニューページを表示する際に実行される関数
        'dashicons-admin-customizer', //メニューのアイコンを示す URL https://elearn.jp/wpman/column/c20170626_01.htmlがわかりやすいです。
        5 // メニューが表示される位置。
    );
}

add_menu_pageで管理画面にメニューを追加しました。

コメントそのままです。

__()とか_e()

今回の内容とは関係無いですが、

__()とか_e()は多言語用の出力するWP関数みたいです。

ローケルのpoとかmo含めて多言語プラグイン作るぞって場合はやった方がいいのでしょう。

別に多言語展開とかしないので無縁なのですが一応やっておきました。

my_custom_option

my_custom_optionっていう命名は適当だけどもこれが実際管理画面の表示とか調整する部分です。

権限チェック

if ( !current_user_can( 'manage_options' ) )

ここで権限確認して表示/非表示です。

権限いっぱいあってよくわからんけども下記参照ください。

https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90

update

if( isset($_POST[ $hidden_field_name ]) && $_POST[ $hidden_field_name ] == 'Y' ) :

上記でpostされているかを判定しているみたいです。

なので真ならばupdate_option&updatedを表示する感じです。

create/delete

ちなみに何となくcreateとかdeleteとかは?とも思ってたけど

特に気にしないで良い?みたい。WPさんが上手いことやってくれるのでしょう、知らない。

my_custom_param

add_action( 'get_header', 'my_custom_param');
function my_custom_param() {
    $opt_name = 'my_custom';
    $param = get_option( $opt_name,'default' );
    define("MY_OPTION", $param);
    // echo MY_OPTION; // とかで使える
}

これも命名適当だけど、

ここで実際表示とかでに使う用に定義します。

add_actionでhookする場所適宜変えれば別に管理画面側とかでも使えると思います。

最後に

個人的にいつも忘れた頃にやってくるwordpress案件です。

今回のは具体的な使い方だと

エイプリルフールだから一日だけ特別仕様に雰囲気変えたい!

とかって要望があった場合に管理画面でちょちょいと値変えて

定義した値で判定やらしてcssとか画像とかの出力変える。

とかですかね。使い方次第ですが

以上です。参考になりましたら幸いでございます。

webword

Posted by admin