カスタム投稿設定について
設定手順
カスタム投稿の作成及び関連する作業は次の手順で行う。
- Custom Post Type UIの設定
カスタム投稿タイプを追加するプラグイン - Custom Post Type Permalinksの設定
カスタム投稿タイプにアーカイブを追加、そしてカスタマイズ出来るパーマリンクを提供します。 - カスタム投稿の投稿リストにターム名をする
- パーマリンクを /カスタム投稿名/ターム名/投稿名/ にする
- カテゴリーウィジェットを拡張してカスタムタクソノミーも選択できるようにする
ここでの設定項目は下記の通りです。
- 投稿タイプのラベル名 「忘備録」
- 投稿タイプスラッグ 「memo」
- タクソノミーのラベル名 「忘備録カテゴリ」
- タクソノミースラッグ 「memo_cate」
- カテゴリの名前 「カスタム投稿」
- カテゴリスラッグ 「custom」
Custom Post Type UIの設定
「Custom Post Type UI」をインストール後、下記の手順で設定を行う。
詳細な設定方法の説明は【Custom Post Type UIの使い方】を参照してください。
更に詳細な設定項目の説明は「誰でも分かる Custom Post Type UI・・・」を参照してください
1.カスタム投稿タイプの追加
ダッシュボードのメニュー 「CPT UI」>「投稿タイプの追加と編集」を開き投稿タイプの追加を行います。
設定する項目は下記の5点です。
- 投稿タイプスラッグ
カスタム投稿のID(半角英数で20文字以内)。ここでは忘備録ということで、「memo」と入力 - 複数系のラベル
カスタム投稿の表記名(日本語でOK)。ここでは「忘備録」と入力 - 単数系のラベル
カスタム投稿の表記名(日本語でOK)。ここでは「忘備録」と入力 - アーカイブあり
Trueと入力(※)アーカイブ一覧表示ページを作るかどうか。通常作るケースが多いのでTrueを選択 - サポート
「なし」以外全てにチェック。どの機能を有効にするかを設定する箇所で、すべて機能有効化しています。
設定後「投稿タイプを追加」をクリックします。
ダッシュボードのメニューに「忘備録」と表示が追加されます。
2.パーマリンク設定の保存
投稿タイプを設定後、ダッシュボードのメニュー 「設定」>「パーマリンク」を開き画面下の「設定を保存」をクリックします。この時点では設定の変更は行う必要はありません。
WordPressの仕様で、カスタム投稿・カスタム分類を追加した際は、パーマリンク保存をしておかないとカスタム投稿が正常に表示されない場合があるため。
3.タクソノミーの追加
ダッシュボードのメニュー 「CPT UI」>「タクソノミーの追加と編集」をクリックします。
「新規タグソノミーを追加」画面で下記の5項目を設定します。
- タクソノミースラッグ
カスタムタクソノミーのID(半角英数で20文字以内)。ここでは「忘備録」カテゴリーということで、「memo_cate」と入力 - 複数系のラベル
カカスタムタクソノミーの表記名(日本語でOK)。ここでは「忘備録カテゴリ」と入力 - 単数系のラベル
カスタムタクソノミー表記名(日本語でOK)。ここでは「忘備録カテゴリ」と入力 - 利用する投稿タイプ
このカスタムタクソノミーをどの投稿タイプに紐づけるか。ここでは「忘備録」にチェックを入れる - 階層
Trueにする。(Trueにすると投稿のカテゴリーのように階層構造を持つ。Falseの場合は投稿のタグのように階層構造を持たない)
設定後画面下の「タグソノミーを追加」をクリックします。
ダッシュボードのメニューに「忘備録」>「忘備録カテゴリ」と表示が追加されます。
4.パーマリンク設定の保存
再度、ダッシュボードのメニュー 「設定」>「パーマリンク」を開き画面下の「設定を保存」をクリックします。この時点では設定の変更は行う必要はありません。
WordPressの仕様で、カスタム投稿・カスタム分類を追加した際は、パーマリンク保存をしておかないとカスタム投稿が正常に表示されない場合があるため。
5.利用するタグソノミーの設定
タクソノミーを追加すると「投稿タイプの追加と編集」画面に「利用するタグソノミー」の項目に上記で設定した「忘備録カテゴリ」が追加されるので、これを選択する。
タクソノミーを追加するごとにこの項目が追加されるのでその都度設定する。
- ダッシュボードのメニュー 「CPT UI」>「投稿タイプの追加と編集」を開き「投稿タイプを編集」タブをクリックする。
- 最下部の「タクソノミー」項目に追加された「忘備録カテゴリ」にチェックを入れる。
- 画面下の「投稿タイプを保存」をクリックして完了。
6.カテゴリーの追加
忘備録カテゴリに任意のカテゴリを追加します。
- ダッシュボードのメニュー 「忘備録」>「忘備録カテゴリ」をクリックします。
- 「新規忘備録カテゴリを追加」メニューの「名前」と「スラッグ」に「カスタム投稿」・「custom」などと記入する。
- 画面下の「新規忘備録カテゴリを追加」をクリックする。
パーマリンク構成の変更
カスタム投稿にタクソノミーとしてカテゴリを追加した際のパーマリンク構成が、デフォルトだと分かりにくいので下記のように変更する。
- ターム別一覧ページ
デフォルト
http://example.com/カスタムタクソノミー名/ターム名/
変更後のパーマリンク構成
http://example.com/カスタム投稿タイプ名/ターム名/ - 記事詳細ページ
デフォルト
http://example.com/カスタム投稿タイプ名/投稿名/
変更後のパーマリンク構成
http://example.com/カスタム投稿タイプ/ターム名/投稿名/
詳細な内容については「パーマリンクを /カスタム投稿名/ターム名/投稿名/に・・」を参照してください。
「Custom Post Type Permalinks」をインストール後、下記の手順で設定します。
※ 「Custom Post Type Permalinks」を有効化すると、「パーマリンク設定画面」に「カスタム投稿タイプのパーマリンク設定」が追加される。
1.Custom Post Type Permalinksの設定
- 「Custom Post Type Permalinks」をインストールし有効化する。
有効化すると、「パーマリンク設定画面」に「カスタム投稿タイプのパーマリンク設定」が追加される。 - ダッシュボードのメニュー 「設定」>「パーマリンク」を開く。
- 共通設定は、カスタム構造を選択しパーマリンクを「/%category%/%post_id%/」とする
- 「カスタム投稿タイプのパーマリンク設定」の「memo」項目に「/%タクソノミー名%/%post_id%/」に設定する。
ここでは、「/%memo_cate%/%post_id%/」となる。「/%post_id%/」の部分は共通設定を同じにする。 - 「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する」にチェックを入れる。
※ カスタム投稿が複数の場合は、「memo」項目に該当する部分が追加されるのでその部分も同じようにパーマリンクを設定する。
2.子テーマ「functions.php」の編集
- 「外観」>「テーマファイルエディター」を開き、右メニューの「編集するテーマ」より「SWELL CHILD]を選択する。
- 「テーマファイル」から「functions.php」をクリックする
- 下記のソースをコピペする。
- 「カスタム投稿タイプ名」と「カスタムタクソノミー名」を追加するカスタム投稿に合わせて書き換える。
ここでは、「カスタム投稿タイプ名」⇒「memo」、「カスタムタクソノミー名」⇒「memo_cate」にします。 - 「ファイルを更新」をクリックする。
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]', 'top');
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/page/([0-9]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]&paged=$matches[2]',
'top');
※ カスタム投稿が複数の場合は下記部分のソースを追加していく。
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]', 'top');
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/page/([0-9]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]&paged=$matches[2]',
'top');
カスタムタクソノミーに対応したカテゴリーウィジェットの追加
標準のカテゴリーウィジェットを継承してカスタムタクソノミーにも対応したカテゴリーウィジェットを作成する。
設定後、ダッシュボードメニューの「外観」>「ウィジット」画面より、「カテゴリー」ウィジットを設定するとタクソノミーを選択しカスタム投稿のカテゴリーを一覧表示することができる。
詳細な内容については「WordPress標準のカテゴリーウィジェットを拡張して・・」を参照してください。
作業は、下記のコードを追加するだけです。
functions.phpにコードを追加
下記のソースを子テーマのfunctions.phpに追加する。
function override_widget_categories() {
class WP_Widget_Categories_Taxonomy extends WP_Widget_Categories {
private $taxonomy = 'category';
public function widget( $args, $instance ) {
if ( !empty( $instance['taxonomy'] ) ) {
$this->taxonomy = $instance['taxonomy'];
}
add_filter( 'widget_categories_dropdown_args', array( $this, 'add_taxonomy_dropdown_args' ), 10 );
add_filter( 'widget_categories_args', array( $this, 'add_taxonomy_dropdown_args' ), 10 );
parent::widget( $args, $instance );
}
public function update( $new_instance, $old_instance ) {
$instance = parent::update( $new_instance, $old_instance );
$taxonomies = $this->get_taxonomies();
$instance['taxonomy'] = 'category';
if ( in_array( $new_instance['taxonomy'], $taxonomies ) ) {
$instance['taxonomy'] = $new_instance['taxonomy'];
}
return $instance;
}
public function form( $instance ) {
parent::form( $instance );
$taxonomy = 'category';
if ( !empty( $instance['taxonomy'] ) ) {
$taxonomy = $instance['taxonomy'];
}
$taxonomies = $this->get_taxonomies();
?>
<p>
<label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ); ?></label><br />
<select id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>">
<?php foreach ( $taxonomies as $value ) : ?>
<option value="<?php echo esc_attr( $value ); ?>"<?php selected( $taxonomy, $value ); ?>><?php echo esc_attr( $value ); ?></option>
<?php endforeach; ?>
</select>
</p>
<?php
}
public function add_taxonomy_dropdown_args( $cat_args ) {
$cat_args['taxonomy'] = $this->taxonomy;
return $cat_args;
}
private function get_taxonomies() {
$taxonomies = get_taxonomies( array(
'public' => true,
) );
return $taxonomies;
}
}
unregister_widget( 'WP_Widget_Categories' );
register_widget( 'WP_Widget_Categories_Taxonomy' );
}
add_action( 'widgets_init', 'override_widget_categories' );
上記のコードをコピーペーストするだけで設定完了です。
メニューより「投稿」を削除する
投稿は使用せずカスタム投稿のみを利用するため、管理メニューより「投稿」の表示を削除する。
下記のソースを子テーマのfunctions.phpに追加する。
/* 投稿メニューを非表示にするhttps://www.bring-flower.com/blog/wordpress-custom-post-type/ */
function remove_menus() {
remove_menu_page( 'edit.php' );
}
add_action( 'admin_menu', 'remove_menus' );
参考サイト
「カスタム投稿タイプ」を利用する場合は通常の「投稿」は使わないという選択肢
カスタム投稿一覧でカテゴリーに絞り込むフィイルターを追加する
投稿一覧にはカテゴリーで絞り込むフィルター表示があるが、カスタム投稿一覧ではその表示がないのでその機能を追加する。子テーマのfunctions.phpにソースを追加して対応するが、投稿ラベルごとに追加しなければならないため、当面この機能は保留とする。