カスタム投稿タイプの一覧(管理画面内)にパーマリンクを追加する方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

本日はカスタム投稿タイプのカスタマイズをご紹介いたします。ちなみに「カスタム投稿タイプ」はカンタンに言えば「投稿ページ機能」の進化版です。ワードプレスでは一般的に「投稿ページ」をブログ記事の更新用として使います。ただ、ブログ記事以外にも『時系列で繰り返し登録するコンテンツ』があった場合に「投稿ページ」が使えないと少し不便ですよね?当然ですが「固定ページ」は繰り返し登録する前提ではない機能なので代用もできません。そんなときに投稿ページと同等の機能を「カスタム投稿タイプ」で補っています。

つまり、カスタム投稿タイプは「投稿ページと同等のコンテンツ管理」を実装するための便利な機能で、一覧ページと詳細ページを必要とするコンテンツの管理に最適な更新方法となります。たとえば企業ホームページではブログと別に「お知らせ」を設置する場面が多く、ブログ記事は投稿ページ、お知らせ更新はカスタム投稿タイプ、残りは固定ページで管理という振り分けでワードプレスを設計することが多いです。

設計によっては「お知らせ」をブログ内のカテゴリーで管理して、ブログの一部として記事を追加するケースもあるので、カスタム投稿タイプを使わずにサイト全体を設計するパターンも当然あります。もし仮に「毎週フリーペーパーを発行する企業」があったら「カスタム投稿タイプ」で『フリーペーパーの管理』を使うなど、使用方法は自社が取り扱っているコンテンツに合わせて最適な方法を選ぶのがベストです。

言うまでもありませんが「カスタム投稿タイプ」は後からでも自由に追加ができて、カスタマイズもできますので、投稿ページとは別で管理したいコンテンツがある方から人気のあるとても便利な機能です。もし興味があれば「カスタム投稿タイプ 使い方」などでグーグルでキーワード検索をして詳しく機能をお調べくださいませ。

前置きが長くなりましが、本日はカスタム投稿タイプで作成した記事の「パーマリンク(URL)」を、一覧ページに表示するカスタマイズ方法を解説いたします。ワードプレスでは「投稿ページ」もパーマリンクは作成記事の画面を開かなければ見れませんので「管理画面の一覧にも表示させる」という便利な裏技です。

なお、カスタム投稿タイプは「プラグインを使った実装方法もある」ため解説記事が混在していて理解に時間がかかりがちですが、本記事はプラグインを一切使わない方法なのでその点はご安心くださいませ。

カスタム投稿タイプの一覧(管理画面内)にパーマリンクを追加する

実は「カスタム投稿タイプを追加」してもワードプレスでは管理画面上の一覧ページにはパーマリンクが表示されません。ちなみに「カスタム投稿タイプ」の追加はfunctions.phpに以下を追記するだけで動きます。

function add_create_custom_post_type() {
	register_post_type( 'information', [
		'labels' => [
			'name'          => 'お知らせ',
			'singular_name' => 'information',
		],
		'public'        => true,  // 投稿タイプを公開にするか
		'has_archive'   => true,  // アーカイブ機能を使うかどうか
		'menu_position' => 5,     // 管理画面上でのメニューの位置
	]);
}
add_action( 'init', 'add_create_custom_post_type' );

以下が実際に「お知らせ」というカスタム投稿タイプを追加した管理画面です。

最低限で追加したので「タイトル」と「本文」と「公開」しか表示されていません。

では実際のお知らせを追加してみましょう。

一覧ページを開いてみましょう。詳細(新規追加画面)ページにあったパーマリンクは表示されていません。

管理画面の一覧にパーマリンクを表示させる

以下をfunctions.phpに記載すればパーマリンクを一覧に表示可能です。2つの処理を行なっています。1つ目が一覧ページに「パーマリンク」という列を追加。そして2つ目が列のなかにパーマリンクの差し込みです。

//カラムに列の名前を追加
function add_custom_posts_into_text_columns( $defaults ) {
	$defaults['permalink'] = 'パーマリンク';
	return $defaults;
}
add_filter('manage_edit-information_columns', 'add_custom_posts_into_text_columns');
 
//カラムに追加した列にパーマリンクを表示
function add_custom_posts_into_text_column_id($column_name, $id) {
	if($column_name == 'permalink'){
		echo get_permalink();
	}
}
add_action('manage_information_posts_custom_column', 'add_custom_posts_into_text_column_id', 10, 2);

差し込んだあとが以下です。一覧にパーマリンクが表示されています。

ちなみにパーマリンクが長いのは「パーマリンク」の設定が日本語のままになっているからです。下記のように編集画面に戻ってパーマリンクを日本語以外で設定すれば一覧ページでの表示も戻ります。

パーマリンクURLの表記がスッキリしましたね。

パーマリンクに記事IDを自動で振り分ける

パーマリンクを毎回編集するのが面倒という方には自動で記事ID(数字)を入力する方法もあります。以下はお知らせ(information)の場合の書き方です。ご自身の環境に合わせてinformationをご変更ください。

add_filter( 'post_type_link', 'information_custom_post_type_link', 1, 2 );
function information_custom_post_type_link( $link, $post ){
	if ( 'information' === $post->post_type ) {
		return home_url( '/information/' . $post->ID );
	} else {
		return $link;
	}
}
 
add_filter( 'rewrite_rules_array', 'information_custom_post_rewrite_rules_array' );
function information_custom_post_rewrite_rules_array( $rules ) {
	$new_rules = array( 
		'information/([0-9]+)/?$' => 'index.php?post_type=information&p=$matches[1]',
	);
	return $new_rules + $rules;
}

設定しなくても自動で記事IDが割り振られます。半角の数字で入るので一覧もすっきりです。

好きな値を手動入力とするか記事IDを自動入力とするかは「パーマリンクをどう使うか」によって異なります。もちろん楽なのは「記事ID」ですが、数字は意味を持たないのでSEO的には不利な一面もあります。

もしパーマリンクを「管理者などサイト運営者がコピーをする状況がある」なら、inputタグを使って体裁を整えるとより使いやすさが向上いたします。readonlyのプロパティも追加して仕上げれば完璧です。

ちなみに上記にする場合は「パーマリンクの出力時点」で「htmlタグを一緒に出力させる必要」がありますのでecho get_permalink();だけではなくもう一手間の処理を足さなければなりません。さきほどのソースと見比べてもらえると変わっている部分がわかるはずです。以下で上書きすればinputで出力できます。

function add_custom_posts_into_text_column_id($column_name, $id) {
	if($column_name == 'permalink'){
		$url = get_permalink();
		$url = '<input type="text" class="large-text" readonly="readonly" value="' . $url . '"/>';
		echo $url;
	}
}
add_action('manage_information_posts_custom_column', 'add_custom_posts_into_text_column_id', 10, 2);

つまり、列の追加からパーマリンクまでを一連で書き換えると以下です。

//カラムに列の名前を追加
function add_custom_posts_into_text_columns( $defaults ) {
	$defaults['permalink'] = 'パーマリンク';
	return $defaults;
}
add_filter('manage_edit-information_columns', 'add_custom_posts_into_text_columns');
 
//カラムに追加した列にパーマリンクを表示
function add_custom_posts_into_text_column_id($column_name, $id) {
	if($column_name == 'permalink'){
		$url = get_permalink();
		$url = '<input type="text" class="large-text" readonly="readonly" value="' . $url . '"/>';
		echo $url;
	}
}
add_action('manage_information_posts_custom_column', 'add_custom_posts_into_text_column_id', 10, 2);

ちなみに上記では「カスタム投稿タイプ」の名前をinfomartionとしていますが、もし扱う情報が本ならbooksなどと状況も変わるはずなので、細かい箇所を見比べながら少しずつ作業を進めれば安全です。

//カラムに列の名前を追加
function add_custom_posts_into_text_columns( $defaults ) {
	$defaults['permalink'] = 'パーマリンク';
	return $defaults;
}
add_filter('manage_edit-{カスタム投稿タイプのスラッグ}_columns', 'add_custom_posts_into_text_columns');
 
//カラムに追加した列にパーマリンクを表示
function add_custom_posts_into_text_column_id($column_name, $id) {
	if($column_name == 'permalink'){
		echo get_permalink();
	}
}
add_action('manage_{カスタム投稿タイプのスラッグ}_posts_custom_column', 'add_custom_posts_into_text_column_id', 10, 2);

今回は「カスタム投稿タイプ」をさらっとご紹介させていただきましたが、カスタム投稿タイプでは投稿ページ同様に「記事のバックアップなどを含むフル機能」でも設定が可能です。以下が記述例です。

function add_rental_house_custom_post_type() {
	$labels = array(
		'name' => _x('レンタルハウス', 'post type general name'),
		'singular_name' => _x('レンタルハウス', 'post type singular name'),
		'add_new' => _x('レンタルハウスを追加', 'rental_house'),
		'add_new_item' => __('新しいレンタルハウスを追加'),
		'edit_item' => __('レンタルハウスを編集'),
		'new_item' => __('新しいレンタルハウス'),
		'view_item' => __('レンタルハウスを編集'),
		'search_items' => __('レンタルハウスを探す'),
		'not_found' => __('レンタルハウスはありません'),
		'not_found_in_trash' => __('ゴミ箱にレンタルハウスはありません'),
		'parent_item_colon' => ''
	);
	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => true,
		'capability_type' => 'post',
		'hierarchical' => false,
		'menu_position' => 5,
		'has_archive' => true,
		'supports' => array('title','editor','author','excerpt','custom-fields','revisions','comments'),
		'taxonomies' => array('rental_house_category','rental_house_tag')
	);
	register_post_type('rental_house',$args);
	$args = array(
		'label' => '地域カテゴリー',
		'public' => true,
		'show_ui' => true,
		'hierarchical' => true
	);
	register_taxonomy('rental_house_category','rental_house',$args);
	$args = array(
		'label' => '人気のタグ',
		'public' => true,
		'show_ui' => true,
		'hierarchical' => false
	);
	register_taxonomy('rental_house_tag','rental_house',$args);
}
add_action('init', 'add_rental_house_custom_post_type');

以下のようにカテゴリーやタグも使用可能です。リビジョン(古いデータの記憶)もコメント機能もOK。

まとめ

さらっと解説する程度に留めるつもりでしたが想像以上のボリュームとなりました。ワードプレスではブログ記事など「時系列で繰り返し登録するコンテンツ」には一般的に「投稿ページ」を使います。ただ、そもそもブログが要らないホームページもあるので投稿ページをどんなコンテンツの管理に使用するかは自由です。

あと、少しだけ話の方向性が変わりますが「投稿ページ」内に独自の入力フォームを追加することもできます。ブログ機能を「投稿ページ」に割り当てるか、あえて投稿ページを「カスタム投稿タイプ」的に使うか、それとも投稿ページは将来のブログ用に残して「カスタム投稿タイプ」を使うかなどすべては好みでOKです。

考え方としては「管理画面を使うユーザー」が使いやすいかどうか、または会員登録など管理画面にログインする可能性が考えられるユーザーにとって快適に操作ができるかどうかで選ぶと間違いありません。多機能すぎるがゆえに「何が正解か分かりにくくなるの」もワードプレスの特徴なので設計は慎重に行いましょう。

最新式の無料プラグインを事前公開

WordPressは公式サイトに登録されているプラグインだけでは機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグイン無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
改良されたプラグインを確認する