デスク周り

WordPressでカスタム投稿の管理画面リストにカテゴリー(ターム名)を追加したい時

こんにちは、茨城県水戸市、小規模中規模ウェブサイト制作なら豊富なネットワークで解決するレターズにお任せください。

というわけで、今回はWordPressでカスタム投稿の管理画面リストにカテゴリー(ターム名)を追加したい時のコードの記述例を下記に備忘録的に載せておきます。

下記のように、カテゴリーを表示して絞り込み機能も実装するのが今回のゴールになります。

管理画面該当箇所

カテゴリーの列を追加する

列自体の追加はとてもシンプルです。下記コードをfunctions.phpに追加します。

function my_add_columns($columns)
{
    $columns['my_column_name'] = 'カテゴリー';

    //move date column to the end
    $date = $columns['date'];
    unset($columns['date']);
    $columns['date'] = $date;

    return $columns;
}


add_filter('manage_edit-products_columns', 'my_add_columns');

次に列にそれぞれのカテゴリーを表示させます。

それぞれの記事のカテゴリー(この場合はターム名)を取得して連結して表示させます。
product-category がこの場合はタクソノミー名になります。

function my_add_columns_content($column_name, $post_id)
{
   //if my column
	if ($column_name == 'my_column_name') {

		//show the value
        $terms = get_the_terms($post_id, 'product-category');

        if ($terms && !is_wp_error($terms)) {
            $draught_links = array();
            foreach ($terms as $term) {
                $draught_links[] = $term->name;
            }
            $stitle = join(", ", $draught_links);
        }
    }

    if (isset($stitle) && $stitle) {
        echo esc_attr($stitle);
    }
}

add_action('manage_products_posts_custom_column', 'my_add_columns_content', 10, 2);

これでカテゴリーの列ができそれぞれのカテゴリー(ターム名)が表示されます。
次はもう少し進んでソート機能をつけてみます。

ソートする列の指定

function my_add_sort($columns)
{
    $columns['my_column_name'] = 'ID';
    return $columns;
}

add_filter('manage_edit-products_sortable_columns', 'my_add_sort');

タクソノミーでの絞り込みを追加

function my_add_filter()
{
    global $post_type;
    if ('products' == $post_type) {
        ?>
        <select name="product-category">
            <option value="">指定なし</option>
            <?php
            $terms = get_terms('product-category');
            foreach ($terms as $term) { ?>
                <option value="<?php echo $term->slug; ?>" <?php if ($_GET['product-category'] == $term->slug) {
                    print 'selected';
                } ?>><?php echo $term->name; ?></option>
                <?php
            }
            ?>
        </select>
        <?php
    }
}

add_action('restrict_manage_posts', 'my_add_filter');

以上カスタム投稿の一覧画面に任意の列を追加するやり方の紹介でした。
これ、クライアントからたまにご要望頂いたりするので知っていると便利ですよね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です