カテゴリー
WordPress

固定ページの親子判定

親ページのスラッグ「parent」、子ページのスラッグ「parent/child」両方に何らかの処理をしたい場合。

global $wp_query;

if (strpos($wp_query->query['pagename'], 'parent') !== false) {
     // 処理
}

WP_Query – Class | Developer.WordPress.org

カテゴリー
WordPress

カスタム投稿タイプ

WordPress のカスタム投稿タイプ。頻繁に設定するものでもなく、機会があるたび、自分で書いた古いコードやネットで再検索するのでメモ。

基本形

例えば、「ニュース」ようのカスタム投稿タイプを作るとする。「my_post_type」としている関数名は、既存の関数名と被らなければ好きな名前で。

add_action('init', 'my_post_type');

function my_post_type()
{
    register_post_type(
        'news',
        array(
            'label' => 'ニュース',
            'labels' => array(
                'all_items' => 'ニュース一覧',
            ),
            'public' => true,
            'menu_position' => 5,
            'has_archive' => true,
        )
    );
}

余計なコードは書きたくないので、デフォルト値や自動的に継承される値をわざわざ書かなければ、私的にはこれが基本かな。

基本形+階層化カテゴリ

先の「my_post_type」関数内に、階層化カテゴリの設定も追加。「’hierarchical’ => true」がないとタグになる。

add_action('init', 'my_post_type');

function my_post_type()
{
    register_post_type(
        'news',
        array(
            'label' => 'ニュース',
            'labels' => array(
                'all_items' => 'ニュース一覧',
            ),
            'public' => true,
            'menu_position' => 5,
            'has_archive' => true,
        )
    );

    register_taxonomy(
        'news_cat',
        'news',
        array(
            'hierarchical' => true,
        )
    );
}

複数追加

たとえば、「ニュース」と「メニュー」の二つを追加するなら、関数内に二つ「register_post_type」を設定すれば OK。

add_action('init', 'my_post_type');

function my_post_type()
{
    register_post_type(
        'news',
        array(
            'label' => 'ニュース',
            'labels' => array(
                'all_items' => 'ニュース一覧',
            ),
            'public' => true,
            'menu_position' => 5,
            'has_archive' => true,
        )
    );

    register_post_type(
        'menu',
        array(
            'label' => 'メニュー',
            'labels' => array(
                'all_items' => 'メニュー一覧',
            ),
            'public' => true,
            'menu_position' => 5,
            'has_archive' => true,
        )
    );
}

リンク

カテゴリー
WordPress

ACF チェックボックス

WordPress のプラグイン Advanced Custom Fields に以下のようなチェックボックスを設定したときの取得方法メモ。

フィールド名は「language」で、 値とラベルの両方を制御するようにした場合。

値とラベルの一覧を取得

foreach (get_field_object('language')['choices'] as $key => $value) {
    echo $key . ' => ' . $value;
}

// 出力
// 1 => HTML
// 2 => CSS
// 3 => JavaScript

※PHP 5.4 以降、関数の返り値を変数に代入しなくても角括弧で直接アクセスできる。PHP: 配列 – Manual#角括弧構文による配列要素へのアクセス

ラベルのみの一覧を取得

foreach (get_field_object('language')['choices'] as $value) {
    echo $value;
}

// 出力
// HTML
// CSS
// JavaScript

選択したラベルを取得

ラジオボタンと違いチェックボックスは複数選択なので、以下のようにすると、配列である事を取得する。

echo get_field('language');

// 出力
// Array

配列なので PHP の foreach で以下のように取得するとして、ACF の「返り値」がデフォルトの「Value」のままだと、投稿時に「HTML」と「CSS」を選択した場合、文字列「1」と「2」を取得する。

foreach (get_field('language') as $value) {
    echo $value . '<br>';
}

// 出力
// 1
// 2

ラベルを取得したい場合、ACF の「返り値」を「ラベル」にするか、「Both (Array)」にして、以下のようにして取得する。

foreach (get_field('language') as $array) {
    echo $array['value'] . ' => ' . $array['label'] . '<br>';
}

// 出力
// 1 => HTML
// 2 => CSS

the_field

投稿時に「HTML」と「CSS」を選択した場合、 ACF の「返り値」の設定によって以下のように HTML を表示する。

Value: 1, 2
ラベル:HTML, CSS
Both (Array):Array, Array

リンク

カテゴリー
WordPress

ACF ラジオボタン

WordPress のプラグイン Advanced Custom Fields に以下のようなラジオボタンを設定したときの取得方法メモ。

フィールド名は「language」で、 値とラベルの両方を制御するようにした場合。

値とラベルの一覧を取得

foreach (get_field_object('language')['choices'] as $key => $value) {
    echo $key . ' => ' . $value;
}

// 出力
// 1 => HTML
// 2 => CSS
// 3 => JavaScript

※PHP 5.4 以降、関数の返り値を変数に代入しなくても角括弧で直接アクセスできる。PHP: 配列 – Manual#角括弧構文による配列要素へのアクセス

ラベルのみの一覧を取得

foreach (get_field_object('language')['choices'] as $value) {
    echo $value;
}

// 出力
// HTML
// CSS
// JavaScript

選択したラベルを取得

ACF の「返り値」がデフォルトの「Value」のままだと、投稿時に「HTML」を選択したとして、以下のようにすると、文字列「1」を取得する。

echo get_field('language');

// 出力
// 1

ラベルを取得したい場合、ACF の「返り値」を「ラベル」にするか、「Both (Array)」にして、以下のようにして取得する。

echo get_field('language')['label'];

// 出力
// HTML

the_field

投稿時に「HTML」を選択した場合、 ACF の「返り値」の設定によって以下のように HTML を表示する。

Value: 1
ラベル:HTML
Both (Array):1, HTML

リンク