WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです

【ha-Basic】テーマでカスタム投稿タイプを使う場合の設定いろいろ

公開日:2019(令和元)年6月13日/最終更新日:

Knowledge Base Wordpress ha-Basic テーマ



WordPressにはカスタムなんちゃらという用語がいっぱい出てきますね。今回はそのうちの1つ、カスタム投稿タイプを【ha-Basic】テーマで使う場合の設定方法を紹介します。

カスタム投稿タイプについて「あれ?普通の投稿と同じように扱われるのでは?」ちょっと疑問に思ったかも知れません。カスタム投稿タイプが投稿と同じように扱われるのはテンプレート部分だけ、つまりはカスタム投稿タイプへ書いた記事は基本何もしなければ投稿と同じように表示されますよ!ということだけ。それ以外の部分はカスタム投稿タイプ用に個別設定したり、投稿だけでなくカスタム投稿タイプも含めて・・といった処置が必要になります。

これは【ha-Basic】テーマでなくてもほとんどのテーマが同じですので、【ha-Basic】テーマを使用していない方はご自身のテーマに照らし合わせて読んでいただければ仕組みは何となく理解いただけると思います。

カスタム投稿タイプを作ろう

通常カスタム投稿タイプは、それ用のコードを記述したものをテーマのfunctions.phpへ追記することで作成でき、運営できるようになります。がfunctions.phpへの追記は失敗すると混乱しますし、何よりコードを覚えるのも面倒なので、簡単なフォームへの設定入力でカスタム投稿タイプの作成ができ、動作させることができるプラグインを使用します。

おすすめは

です。後に設定内容を変更する場合もこのプラグインの設定メニューからできますので非常に便利です。

※もう完成したからプラグインをなしにしたいという方はこのプラグインが出力するプログラムをfunctions.phpへ追記すればプラグインを停止しても動作します(コードが重複しても動作はするように設計されているのでそこも安心ですね)。

カスタム投稿タイプを作る部分については今回の記事とは主旨が異なりますのでこの位にしておきます。

ここからはこのプラグインやカスタム投稿タイプを追加するコードでできないことで、使い勝手を良くしたりする方法を【ha-Basic】テーマへ設定する方法を例にいくつか紹介してきます。

【ha-Basic】テーマファイルの修正

カスタム投稿タイプ名を「custom」にした場合をベースに解説していきますので、ご自身で作られたカスタム投稿タイプ名に置き換えて設定してください。

関連記事へカスタム投稿タイプを含める

【ha-Basic】が関連記事を抽出する条件は「投稿」の中で「同一のカテゴリー」にある記事をランダム表示させていますので、これにカスタム投稿タイプを含める場合には変更します

編集するのは「related-entries.php」と「related-entry-mobile.php」の2つです(編集部分は同じです)。

それぞれのファイルの8行目付近にある

$args = array(
'post__not_in' => array($post -> ID),

の下に以下のコードを追加します。

'post_type' => array('post','custom'),

これは「投稿」と「customというカスタム投稿タイプ」の両方から記事を抽出してくださいという指示になります。

投稿タイプ名はご自身の環境に合わせてください。複数追加する場合は「,’投稿タイプ名’」を後ろに追加してください。

追加したら保存して完了です

バージョン4.9より前のWordPressではコードに間違いがあると画面が真っ白になってサイトが動作しなくなりますので慎重に作業してください。

「説明」と「キーワード」入力欄の追加

【ha-Basic】テーマではHTMLへのメタデータを以下のような仕組みで出力しています。

  • キーワード(meta-keywords)
    投稿編集画面の「キーワード」欄に入力があればそのまま出力、そうでなければ空データ
  • 抜粋(meta-description)/構造化データ(schema)/SNS埋め込み時に利用されるコード(OGP)
    投稿編集画面の「キーワード」欄に入力があればそのまま出力、なければショートコードを省いた上で本文先頭から〇文字

これはカスタム投稿タイプでも同じですので、カスタム投稿タイプの投稿編集画面へ入力用の窓を用意します。

編集するのは「seo_fields.php」です。

8行目付近に

add_meta_box( 'seo_setting', 'SEO対策', 'seo_custom_fields', 'page', 'normal', 'high');

という記述がありますのですぐ下にコピーして以下のように変更します

add_meta_box( 'seo_setting', 'SEO対策', 'seo_custom_fields', 'custom', 'normal', 'high');

投稿タイプ名はご自身の環境に合わせてください。複数追加する場合は行をコピーしてカスタム投稿タイプ名に変更する作業を繰り返してください

終わったら保存して完了です

バージョン4.9より前のWordPressではコードに間違いがあると画面が真っ白になってサイトが動作しなくなりますので慎重に作業してください。

更新日を変更するか否かの設定を追加する

軽微な更新をするだけで更新日が変更されないようにできるよう、【ha-Basic】では投稿・固定ページにおいて更新日を変更するか否かの選択ができるようにしています。これをカスタム投稿タイプにも適用するには「functions.php」を編集します。

330行目付近にある

add_meta_box( 'update_level', '更新日の変更', 'html_update_level_custom_box', 'post', 'side', 'high' );

の下に以下の行を追加します

add_meta_box( 'update_level', '更新日の変更', 'html_update_level_custom_box', 'カスタム投稿タイプ名', 'side', 'high' );

※カスタム投稿タイプ名はご自身の環境に合わせて変更してください。また、複数のカスタム投稿タイプへこの機能を追加する場合には行を必要分だけ追加してください

2列表示記事リストの編集

【ha-Basic】には任意の場所にショートコードを入れることで新着記事を表示できる機能が搭載されています。

これも通常は「投稿」のみが含まれますのでカスタム投稿タイプも含まれるようにします。

編集するのは「post-list2x5.php」です。

16行目付近に

'post_type' => 'post',

という記述がありますので以下のように変更します

'post_type' => array('post','custom'),

投稿タイプ名はご自身の環境に合わせてください。複数追加する場合は「,’投稿タイプ名’」を後ろに追加してください。

終わったら保存して完了です


基本的にはこの4つを変更するだけでOKです。

その他プラグインの設定についてはそれぞれのプラグインの解説などを参照ください。

管理画面やWordPressの基本機能を変更してカスタム投稿タイプを使いやすくする方法いろいろ

カスタム投稿タイプ名を「custom」として紹介しますのでご自身の環境に置き換えてください(customとなっているところを変更してください)

【ha-Basic】の場合、コードはすべてテーマの「a-insert-functions.php」へ追記してきます

カスタム投稿タイプの記事公開(更新時)にPing送信するようにする

function cutom_pings_at_publish( $post_id ) {
wp_schedule_single_event( strtotime( '+10 min' ), 'do_pings', array( $post_id ) );
}

ダッシュボードの新着記事一覧へ追加

function chample_latest_posts( $wp_query ) {
if ( is_home() && ! isset( $wp_query->query_vars['suppress_filters'] ) ) {
$wp_query->query_vars['post_type'] = array('post','custom');
}
}
add_action( 'parse_query', 'chample_latest_posts' );

表示画面のカテゴリーアーカイブ(カテゴリー一覧リスト)に含める

function add_post_category_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_category()) {
$wp_query->set( 'post_type', array('post','custom'));
}
}
add_action( 'pre_get_posts', 'add_post_category_archive' , 10 , 1);

表示画面のタグーアーカイブに含める

function add_post_tag_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_tag()) {
$wp_query->set( 'post_type', array('post','custom'));
}
}
add_action( 'pre_get_posts', 'add_post_tag_archive' , 10 , 1);

管理画面のダッシュボードへ記事数追加

add_action( 'dashboard_glance_items', 'add_custom_post_dashboard_widget' );
function add_custom_post_dashboard_widget() {
$args = array(
'public' => true,
'_builtin' => false
);
$output = 'object';
$operator = 'and';

$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
$num_posts = wp_count_posts( $post_type->name );
$num = number_format_i18n( $num_posts->publish );
$text = _n( $post_type->labels->singular_name, $post_type->labels->name, intval( $num_posts->publish ) );
if ( current_user_can( 'edit_posts' ) ) {
$output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $num . '&nbsp;' . $text . '</a>';
}
echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
}
}

管理画面のアクティビティへ記事数追加

add_filter( 'dashboard_recent_posts_query_args', 'my_dashboard_recent_posts_query_args', 10, 1 );

function my_dashboard_recent_posts_query_args( $query_args ) {

$query_args['post_type'] = array('post','custom');

if ( $query_args['post_status'] == "publish" )

$query_args['posts_per_page'] = 10;

return $query_args;

}

RSSフィードにカスタム投稿タイプを含める

function myfeed_request($qv) {
if (isset($qv['feed']) && !isset($qv['post_type']))
$qv['post_type'] = array('post','custom');
return $qv;
}
add_filter('request', 'myfeed_request');