技術ブログ
テンプレート実装に必要な基本的記述
以下の基本テンプレートでよくある記述を整理。
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;
メインループ内(あるいは個別記事コンテキスト内)でのアイキャッチの実装
メインループ内(あるいは個別記事コンテキスト内)での日付の実装
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
サブメニューの実装
別記事で記載します。