技術ブログ
テンプレート実装に必要な基本的記述
以下の基本テンプレートでよくある記述を整理。
home.php archive.php category.php taxonomy.php single.php search.php date.php page.php
テンプレート間で共通な記述
メインクエリの実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
//デフォルトの並び替え条件は\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の実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//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 { } |
パンくずの実装
1 2 3 4 |
//pressx.jp テンプレートでは breadcrumb()で実装可能。 breadcrumb(); |
メインループの実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//どちらでもお好きな方で。。 //記法1 <?php if(have_posts()):?> <?php while(have_posts()): ?> <?php the_post(); ?> <?php endwhile; ?> <?php endif; ?> //記法2 <?php if(have_posts()){ while(have_posts()){ the_post(); } } ?> |
メインループ内(あるいは個別記事コンテキスト内)での関連カテゴリーの実装
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php //仮にタクソノミーがblog_categoryの場合 $terms = get_the_terms($post->ID,'blog_category'); if($terms){ foreach( $terms as $term ) { ?> <span class="category"><a href="<?php echo get_term_link($term->term_id) ?>"><?php echo $term->name; ?></a></span> <?php } } ?> |
親カテゴリーの取得
1 2 3 4 5 6 |
//祖先カテゴリーを配列で取得 get_ancestors( [カテゴリーID], 'category' ) //参考 get_ancestors( [固定ページ記事ID], 'page' ) |
メインループ内(あるいは個別記事コンテキスト内)でのタイトルの実装
1 2 3 4 5 6 7 8 |
//グローバル変数$postを使用する場合 global $post; //この1行はメインループ内や、記事詳細コンテキストでは不要 $post->post_title; //the title() the title(); |
メインループ内(あるいは個別記事コンテキスト内)での本文の実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//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(); |
メインループ内(あるいは個別記事コンテキスト内)でのカスタムフィールドの実装
1 2 3 4 5 6 7 8 9 10 11 |
//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 ); |
メインループ内(あるいは個別記事コンテキスト内)でのカスタムフィールド画像の実装
1 2 3 4 5 6 7 8 |
//カスタムフィールドが画像の場合 //仮にカスタムフィールドのキーが'acf_image'の場合 $acf_image = get_field('acf_image',get_the_ID()); //戻り値が配列なので注意 $acf_image_img_tag = $acf_image['url'] ? '<img src="' . $acf_image['url'] . '">' : ""; echo $acf_image_img_tag; |
メインループ内(あるいは個別記事コンテキスト内)でのアイキャッチの実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php //pressx.jpテンプレートではinc/jnm-settings-othres.phpに記載 //pressx.jpテンプレートでない場合はfunction.phpに記載 //アイキャッチ有効化 //対象投稿タイプを配列で記入 add_theme_support( 'post-thumbnails', array( 'post' , 'blog' )); ?> <?php // アイキャッチ画像のURLを出力 the_post_thumbnail_url( 'medium' ); ?> <?php // アイキャッチ画像のURLを取得 get_the_post_thumbnail_url( get_the_ID(), 'medium' ); ?> <?php // アイキャッチ画像がなければnoimage $list_thumb = get_the_post_thumbnail_url(); ?> <?php if($list_thumb){ ?> <img src="<?php echo $list_thumb; ?>" alt="<?php echo $post->post_title; ?>" > <?php } else { ?> <img src="<?php echo get_home_url(); ?>/common/img/noimage.png"> <?php } ?> |
メインループ内(あるいは個別記事コンテキスト内)での日付の実装
1 2 3 4 |
echo get_post_time('Y.m.d H-i-s'); the_time('Y.m.d H-i-s'); |
サブクエリーの実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//サブクエリー関数定義 //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(); |
現在コンテキストの投稿タイプ情報、タクソノミー情報の取得
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //pressx.jpでは以下のglobal変数に必要情報を格納しています。 $jnm_info['taxonomy']['slug']; //現在のタクソノミーのスラッグ $jnm_info['taxonomy']['obj']; //現在のタクソノミーのオブジェクト $jnm_info['taxonomy']['label']; //現在のタクソノミーのラベル $jnm_info['post-type']['slug']; //現在の投稿タイプのスラッグ $jnm_info['post-type']['obj']; //現在の投稿タイプのオブジェクト $jnm_info['post-type']['label']; //現在の投稿タイプのラベル ?> |
コンテキスト基本情報の取得 $bodyparts $headparts $jnm_info
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //pressx.jpでは以下のglobal変数に必要情報を格納しています。 //$bodyparts $headparts $jnm_info var_dump($bodyparts); var_dump($headparts); var_dump($jnm_info); ?> |
サブメニューの実装
別記事で記載します。