MENU

init– Hook –

initは、WordPressのアクションフックの1つで、初期化処理を行うために利用されます。カスタム投稿タイプやタクソノミーの登録、スクリプトやスタイルの読み込みなどの初期化が可能です。

目次

機能の説明

initは、テーマやプラグインの初期化時に特定のコードを実行するためのアクションフックです。初期設定やタクソノミー、カスタム投稿タイプの追加、短縮コード(ショートコード)の登録、ユーザーの権限設定の変更など、様々な初期化処理を行う際に使用します。

シンプルなコード例

<?php
add_action('init', function() {
    register_post_type('custom_post', array(
        'label' => 'カスタム投稿',
        'public' => true,
        'supports' => array('title', 'editor', 'thumbnail')
    ));
});
?>

このコードは、initフックを利用して「カスタム投稿タイプ」を登録する例です。initフックに関数をフックし、カスタム投稿を追加しています。

使い方の解説

initは、プラグインやテーマで特定の機能を登録するために頻繁に使用されます。add_action()関数を用いて、実行したい関数をinitにフックします。例えば、スクリプトの登録や、タクソノミー、カスタム投稿タイプの登録などに用いられます。

引数

無し

initには直接的な引数はなく、使用する際はadd_action()でフックする形になります。

戻り値

無し

init自体には戻り値はありませんが、フックされた関数の処理に応じた結果が生じます。

オプション

initには直接的なオプションはありませんが、add_action()関数を使う際に優先度を設定できます。

'priority'

実行順序を決定するための優先度(デフォルトは10)

  • : 整数 : add_action('init', 'my_function', 15);

使用例

<?php
add_action('init', function() {
    // カスタムタクソノミーの登録
    register_taxonomy('genre', 'post', array(
        'label' => 'ジャンル',
        'hierarchical' => true,
        'public' => true
    ));
});
?>

このコードは、initフックを使ってgenreというカスタムタクソノミー(階層構造を持つジャンル)をpostに追加する例です。これにより、投稿記事にジャンルを設定できるようになります。

一緒に使うことが多い関連タグ

register_post_type()

register_post_type()は、WordPressにカスタム投稿タイプを追加するための関数です。initフック内で使用することで、投稿タイプを初期化時に登録できます。

<?php
add_action('init', function() {
    register_post_type('custom_news', array(
        'label' => 'ニュース',
        'public' => true,
        'supports' => array('title', 'editor')
    ));
});
?>

このコードは、custom_newsというカスタム投稿タイプを「ニュース」として追加する例です。initフックと組み合わせて、サイトの初期化時に投稿タイプを登録します。

register_taxonomy()

register_taxonomy()は、WordPressにカスタムタクソノミーを追加するための関数です。initフック内で使用することで、タクソノミーを初期化時に登録できます。

<?php
add_action('init', function() {
    register_taxonomy('topic', 'custom_news', array(
        'label' => 'トピック',
        'hierarchical' => false,
        'public' => true
    ));
});
?>

この例では、custom_news投稿タイプに関連する「トピック」タクソノミーを登録しています。initフックを利用することで、WordPress初期化時にタクソノミーを追加します。

add_shortcode()

add_shortcode()は、WordPressでショートコードを作成するための関数です。initフック内で使用することで、テーマやプラグインにショートコードを登録できます。

<?php
add_action('init', function() {
    add_shortcode('greeting', function() {
        return 'こんにちは!';
    });
});
?>

このコードは、[greeting]というショートコードを定義し、「こんにちは!」というテキストを出力する例です。initフックを使うことで、サイトが初期化された際にショートコードが使用可能になります。

追加情報を取得したい場合

initフックに加え、カスタマイズ可能なフックや関数を組み合わせて、さらに複雑な初期設定やデータ操作が可能です。

current_user_can()で取得できるユーザー権限情報

current_user_can()を使用することで、現在のユーザーが特定の権限を持つかを確認できます。

<?php
add_action('init', function() {
    if (current_user_can('edit_posts')) {
        // 権限を持つユーザー向けの処理
        echo '編集権限があります。';
    }
});
?>

このコードでは、initフック内でcurrent_user_can()を利用し、現在のユーザーが投稿編集権限を持つかを確認しています。

出力できる情報

  • 権限チェック: 管理者や投稿者など、権限に応じた処理が可能
  • カスタム権限: ユーザーのカスタム権限の確認や処理分岐ができる

想定されるトラブル

フックの優先度が原因で登録が正常に行われない

優先度が適切でない場合、initの処理が競合してエラーが発生することがあります。

解決策

add_action()の第3引数で優先度を調整して解決します。

プラグインやテーマの競合

他のプラグインやテーマで同じinitフックを使っていると、意図しない動作が発生する場合があります。

解決策

ユニークな関数名を用いる、またはpriorityを適切に設定して競合を避けます。

Q&A

initフックの適切なタイミングは?

initは、WordPressがテーマやプラグインをロードした後、データベースとの接続が完了したタイミングで呼ばれます。カスタム投稿やタクソノミーの登録に最適です。

initフックを複数設定しても大丈夫?

はい、異なる優先度や関数名で設定することで、複数のinitフックを登録できます。

ユーザー情報は取得できる?

はい、initフック内でcurrent_user_can()などを使い、ユーザーの権限情報を確認できます。

まとめ

initフックは、WordPressの初期化時に特定の処理を実行するための非常に重要なアクションフックです。

カスタム投稿やタクソノミーの追加、ユーザー権限の設定、ショートコードの登録など、さまざまな用途に利用されます。initを使うことで、WordPressの柔軟な拡張やカスタマイズが可能となり、サイトの構築に欠かせない役割を果たします。

カスタマイズ例

1