閉じる

技術ブログ

テンプレート実装に必要な基本的記述

以下の基本テンプレートでよくある記述を整理。
home.php archive.php category.php taxonomy.php single.php search.php date.php page.php

テンプレート間で共通な記述

メインクエリの実装
//デフォルトの並び替え条件は\wp-includes\class-wp-query.phpで生成され、メインクエリに保持される。
//posts_per_pageは管理画面で設定した値、orderはデフォルトDESC(降順)が初期値で設定されている。
//ちなみにorderbyは保持されていないがデフォルト投稿の投稿日で\wp\wp-includes\class-wp-query.phpで直接SQL文が生成されている。
//archive.phpあたりのテンプレートで以下を実行すれば初期値は確認できる。
global $wp_query;
var_dump($wp_query->query_vars['posts_per_page']);
var_dump($wp_query->query_vars['orderby']);
exit();


//function.php内に記述
//pressx.jp テンプレートでは inc/jnm-settings-main-query.php内に記述
  /*
  * デフォルトカテゴリーの場合
  */
  if ( $query->is_category() ) { //表示させる投稿ページの種類
      $query->set( 'posts_per_page', '5' ); //1ページ投稿表示数を5件に変更
      $query->set( 'order', 'desc' );
  }
  /*
  * 月別アーカイブの場合
  */
  if ( $query->is_month() ) { //表示させる投稿ページの種類
      $query->set( 'posts_per_page', '5' ); //1ページ投稿表示数を5件に変更
      $query->set( 'order', 'desc' );
  }

  /*
  * カスタム投稿タイプ(仮にblog)の場合 is_post_type_archive
  */
  if ( $query->is_post_type_archive( 'blog' ) ) { //表示させる投稿ページの種類
      $query->set( 'posts_per_page', '12' ); //最大投稿表示数を10件に変更
      $query->set( 'orderby', 'post_date' );
      $query->set( 'order', 'desc' );
  }

  /*
  * カスタム投稿タイプ(仮にblogの)タクソノミーの場合blog is_tax
  */
  if ( $query->is_tax() ) { //表示させる投稿ページの種類
    //★pressx.jp テンプレートでのみ有効 $jnm_info['taxonomy']['obj']が使用できない場合は自分でtaxonomyのオブジェクトを取得してください。
    $my_post_type_array          = $jnm_info['taxonomy']['obj']->object_type;
    if( is_array( $my_post_type_array ) && count( $my_post_type_array ) > 0 ){
      foreach ($my_post_type_array as $key => $post_type_slug) {
        /* blogカテゴリー*/
        if( $post_type_slug =="blog" ){
            $query->set( 'post_type', $post_type_slug );
            $query->set( 'posts_per_page', '12' ); //最大投稿表示数を12件に変更
            $query->set( 'orderby', 'post_date' );
            $query->set( 'order', 'desc' );
        }
      }
    }
  }
headの実装
//header.php内に記述
//pressx.jp テンプレートでは、グローバル変数で設定した$headpartsで、メタタグなどの基本情報は実装済み
//テンプレート別の分岐は以下
if ( is_front_page() && is_home() ) {
} else if ( is_page() ) {
} else if ( is_single() ) {
} else if ( is_category() ) {
} else if ( is_post_type_archive() ) {
	if ( is_month() ) {
	} else {
	}
} else if ( is_tax() ) {
} else if ( is_month() ) {
} else if ( is_404() ) {
} else {
}


パンくずの実装
//pressx.jp テンプレートでは breadcrumb()で実装可能。
breadcrumb();
メインループの実装
//どちらでもお好きな方で。。
//記法1

  
    
  


//記法2

メインループ内(あるいは個別記事コンテキスト内)での関連カテゴリーの実装
ID,'blog_category');
if($terms){
  foreach( $terms as $term ) {
?>
  name; ?>

親カテゴリーの取得
//祖先カテゴリーを配列で取得
get_ancestors( [カテゴリーID], 'category' )
//参考
get_ancestors( [固定ページ記事ID], 'page' )

メインループ内(あるいは個別記事コンテキスト内)でのタイトルの実装
//グローバル変数$postを使用する場合
global $post; //この1行はメインループ内や、記事詳細コンテキストでは不要
$post->post_title;

//the title()
the title();

メインループ内(あるいは個別記事コンテキスト内)での本文の実装
//filter the_contentを通す場合
the_content();

//直接データを取得したい場合
$content = get_the_content();
echo $content;

//本文からの一部文字抜粋(改行コードとスペースも削除)
$remove_array = ["\r\n", "\r", "\n", " ", " "];
$content = get_the_content();
$content = strip_shortcodes($content);
$content = apply_filters( 'the_content', $content );
$content = wp_trim_words($content, 80, '…' );
$content = str_replace($remove_array, '', $content);
echo $content;

//注 strip_shortcodesは「登録されているショートコードのみ」を削除するので削除されないショートコードもでてくる。
//「登録されているショートコード」は以下で確認が可能
global $shortcode_tags;
var_dump($shortcode_tags);
exit();

メインループ内(あるいは個別記事コンテキスト内)でのカスタムフィールドの実装
//AdvancedCustomField利用時の呼び出し
get_field('[カスタムフィールドのキー]');

//WordPressデフォルト(プラグインを利用しない)の呼び出し
//get_post_meta( $post_id, $key, $single );
//$post_id: 記事ID
//$key : カスタムフィールドのキー
//$single : true(文字列が戻り値) false:(配列が戻り値)
get_post_meta( get_the_ID() , '[カスタムフィールドのキー]', TRUE );

メインループ内(あるいは個別記事コンテキスト内)でのカスタムフィールド画像の実装
//カスタムフィールドが画像の場合
//仮にカスタムフィールドのキーが'acf_image'の場合
$acf_image = get_field('acf_image',get_the_ID());
//戻り値が配列なので注意
$acf_image_img_tag = $acf_image['url'] ? '' : "";
echo $acf_image_img_tag;
メインループ内(あるいは個別記事コンテキスト内)でのアイキャッチの実装








  <?php echo $post->post_title; ?>

  



メインループ内(あるいは個別記事コンテキスト内)での日付の実装
echo get_post_time('Y.m.d H-i-s');
the_time('Y.m.d H-i-s');
サブクエリーの実装

//サブクエリー関数定義
//pressx.jpテンプレートではinc/jnm-settings-sub-query.phpに記載
//pressx.jpテンプレートでない場合はfunction.phpに記載
function jnm_get_for_blog( $my_posts_per_page=10 ){
     $args = array(
       'posts_per_page' => $my_posts_per_page, //最大投稿表示数を10件に変更
       'orderby'        => 'post_date',
       'order'          => 'desc',
       'post_type'      => 'blog',
     );
    return $args;
}

// テンプレート内での関数の呼び出し
// 関数呼び出し側の利用テンプレートでは以下のように記述
$args     = jnm_get_for_blog( 3 );
$my_query = new WP_Query( $args );
$tempi=1;
if($my_query->have_posts()){
  while($my_query->have_posts()){
    $my_query->the_post();
    (ループ処理を記述)
  }
}
wp_reset_postdata();

現在コンテキストの投稿タイプ情報、タクソノミー情報の取得

コンテキスト基本情報の取得 $bodyparts $headparts $jnm_info

サブメニューの実装

別記事で記載します。

テンプレート間で異なる記述