宅猫まろん用のカスタム投稿作成でのカスタマイズ(2)改訂2

本記事は古いです、以下の記事を見てください。
また、テーマがSimplicity2の場合だった時のカスタマイズです。

にゃんきち日和(ブログ) のカスタマイズについてにゃんきち日和

知人からWordpressでの会員サイトのベースとなるようなサンプルを作れないかとお願いされてデモ会員サイトを作っているのですが、作っている段階で、にゃんきち日和のカスタマイズでダメダメな部分があったのを修正して、カスタマイズ(2)を改訂しました。
デモ会員サイトと言っても、WP-MenbersプラグインとbbPressプラグインで作っているだけなんですけどね。
2017/3/8 修正しました。
カスタム投稿のカテゴリーとタグを判別するのに is_taxonomy_hierarchical()関数があるので変更しました。

simplicityテーマのカスタマイズ内容一覧

カスタマイズは、simplicityの子テーマを使うため、親テーマと共に子テーマをインストールしていることが前提です。
simplicity2は、バージョン2.4.1 を使っています。

参考 Simplicityの子テーマSimplicity

カスタムの内容一覧

  • ホームページ新着一覧にカスタム投稿を含めた1ページのみとし、にゃんきちブログとまろんブログを別の固定ページとして作成。
  • 通常投稿と同じようにカテゴリ分類(タクソノミー)の一覧とカスタム投稿個別記事でパンくずリストを表示。
  • 通常投稿と同じようにカスタム投稿でカスタム分類を指定しなかった場合に規定値を設定。
  • カスタム投稿でMarkdownを使用。
  • カスタム投稿をRSSに含める。
  • サイドバーにカスタム投稿の新着、カテゴリ、アーカイブを表示。

カスタマイズするのに以下のサイト記事を参考にさせていただきました。

ホームページの新着一覧にカスタム投稿を含めるのに、以下のサイト記事を参考にさせていただきました。

参考 【wordpress】pre_get_postsを使ってみませんか?Qiita

カスタム投稿の個別記事表示でのパンくずリスト表示では、以下のサイト記事を参考というか、関数get_youngest_tax($taxes, $mytaxonomy)を丸々使わせていただきました。
自分では作れそうにない関数なのでありがたいことです。

参考 WordPress でパンくずリストを出力するWeb Design Leaves

ホームページにお知らせ用のウィジェットを作成するのに、以下のサイトの記事を参考にさせていただきました。

参考 トップページだけに表示するウィジェットエリアを作るーSimplicity編ゆうそうとITブログ

最初に一覧表示(list.php)とパンくずリスト(breadcrumbs.php)をカスタマイズします。

親テーマからlist.php、breadcrumbs.phpを子テーマにコピーします。

コピーしてきたlist.phpの修正

先頭部分の「パンくずリスト」コードに、
【修正前】

<?php
////////////////////////////
//パンくずリスト
////////////////////////////
  if (is_category()) {
    get_template_part('breadcrumbs');
  }
?>

カスタムタ分類の場合もbreadcrumbs.phpを呼び出すようにします。
【修正後】

<?php
////////////////////////////
//パンくずリスト
////////////////////////////
  if (is_category() || is_tax()) {
    get_template_part('breadcrumbs');
  }
?>

「アーカイブのタイトル」コード部分に「にゃんきち:」「まろん:」表記を追加し、投稿者記事一覧の判断の場所を変更します。
変更していないと、「にゃんきち:にゃんきち」となってしまいます。
【修正前】

    <?php if( is_category() ) { ?>
    <?php single_cat_title(); ?>

通常投稿なので「にゃんきち:」を追加します。
【修正後】

    <?php if( is_category() ) { ?>
    にゃんきち:
    <?php single_cat_title(); ?>

【修正前】

    <?php single_term_title(); ?>
    <?php } elseif (is_day()) { ?>

タグは使わないのですが、「にゃんきち:」を追加します。
【修正後】

    <?php } elseif( is_tag() ) { ?>
    にゃんきち:
    <?php single_tag_title(); ?>

【修正前】

    <?php } elseif( is_tax() ) { ?>
    <?php single_term_title(); ?>
    <?php } elseif (is_day()) { ?>

カスタム投稿の「まろん:」を追加し、is_author()の判断位置を変更し、以降は投稿タイプで表示変更できるように判断文を追加します。
【修正後】

     <?php } elseif( is_tax() ) { ?>
    まろん:
    <?php single_term_title(); ?>
    <?php } elseif (is_author()) { ?>
    <?php echo esc_html(get_queried_object()->display_name).':'; ?>
    <?php } else { ?>
    <?php if( is_post_type_archive( 'maron' ) ) { ?>
    まろん:
    <?php } else { ?>
    にゃんきち:
    <?php } ?>
    <?php if (is_day()) { ?>

【修正前】

    <?php echo get_the_time( get_theme_text_y_format() );//年のフォーマットを取得 ?>
    <?php } elseif (is_author()) { ?>
    <?php echo esc_html(get_queried_object()->display_name); ?>
    <?php } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
    Archives
    <?php } else { ?>
    Archives
    <?php } ?>
  」<?php echo get_theme_text_list();//「一覧」部分の取得 ?>

is_author()判断を削除し、Archivesを「ブログ」に変更し、上記の投稿タイプで表示を変更する判断文用の閉じカッコを追加します。
【修正後】

    <?php echo get_the_time( get_theme_text_y_format() );//年のフォーマットを取得 ?>
    <?php } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
    ブログ
    <?php } else { ?>
    ブログ
    <?php } ?>
    <?php } ?>
  」<?php echo get_theme_text_list();//「一覧」部分の取得 ?>

breadcrumbs.phpの修正

カスタム分類でパンくずリストが表示できるように修正してみましたが、Wordpress内部/PHPに詳しくなくため、正しくない修正かもしれませんので参考程度としてください。
また、カスタム投稿のパンくずには、カスタム投稿名(アイコンはfa-paw)の表示も入れています。

カスタム投稿のカテゴリー指定は1つのみです。

通常投稿かの判断を入れます。
【修正前】

<?php //カテゴリ用のパンくずリスト
$cat = is_single() ? get_the_category() : array(get_category($cat));

【修正後】

<?php //パンくずリスト
$post_type = get_post_type();
if($post_type == 'post') {
//通常投稿カテゴリ用
$cat = is_single() ? get_the_category() : array(get_category($cat));

カスタム投稿用のパンくずリストを追加します。
【修正前】

    echo '</div><!-- /#breadcrumb -->';
}

【修正後】

    echo '</div><!-- /#breadcrumb -->';
}
} else {
//カスタム投稿タクソノミー用
  $my_taxonomy = get_query_var('taxonomy');  //[taxonomy] の値(タクソノミーのスラッグ)
  $echo = null;
  $query_obj = get_queried_object();
  if($my_taxonomy &&  is_tax($my_taxonomy)) {//カスタム分類か判定
    $par_base = get_term( $query_obj->term_id, $query_obj->taxonomy );
    $par = get_term( $par_base->parent, $par_base->taxonomy );
  } else { //カスタム投稿での個別記事
    $taxes = get_object_taxonomies($post_type);
    $my_taxonomy = $taxes[0];
    $taxes = get_the_terms($post->ID, $my_taxonomy); 
    $par_base = get_youngest_tax($taxes, $my_taxonomy );  //print_r($tax);    
    $par = get_term( $par_base->parent, $par_base->taxonomy );
  }
  echo '<div id="breadcrumb" class="breadcrumb-category">';
  //ホームページリンク
  echo '<div itemtype="http://data-vocabulary.org/Breadcrumb" itemscope="" class="breadcrumb-home"><span class="fa fa-home fa-fw"></span><a href="'.home_url().'" itemprop="url"><span itemprop="title">'.get_theme_text_breadcrumbs_home().'</span></a><span class="sp"><span class="fa fa-angle-right"></span></span></div>';
  //カスタム投稿リンク
  echo '<div itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><span class="fa fa-paw fa-fw"></span><a href="'.home_url()."/".$post_type.'" itemprop="url"><span itemprop="title">'.get_post_type_object($post_type)->label.'</span></a><span class="sp"><span class="fa fa-angle-right"></span></span></div>';
  //カスタム分類リンク
  if(is_taxonomy_hierarchical($my_taxonomy)) { // カテゴリの場合
    while($par && !is_wp_error($par) && $par->term_id != 0){
        $echo = '<div itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><span class="fa fa-folder fa-fw"></span><a href="'.get_term_link($par->term_id,$par->taxonomy).'" itemprop="url"><span itemprop="title">'.$par->name.'</span></a><span class="sp"><span class="fa fa-angle-right"></span></span></div>'.$echo;
        $par = get_term( $par->parent, $par->taxonomy );
    }
    echo $echo.'<div itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><span class="fa fa-folder fa-fw"></span><a href="'.get_term_link($par_base->term_id,$par_base->taxonomy).'" itemprop="url"><span itemprop="title">'.$par_base->name.'</span></a></div>';
    echo '</div><!-- /#breadcrumb -->';
  } else { // タクソノミーがタグの場合
    echo $echo.'<div itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><span class="fa fa-tag fa-fw"></span><a href="'.get_term_link($par_base->term_id,$par_base->taxonomy).'" itemprop="url"><span itemprop="title">'.$par_base->name.'</span></a></div>';
    echo '</div><!-- /#breadcrumb -->';
    }
}

関数get_youngest_tax($taxes, $mytaxonomy)は、参考にしたサイトの記事からコピーして?>の前に追加するか、functions.phpに追加してください。

次にホームページは、カスタム投稿を含めた一覧表示と、お知らせを表示するウィジェットを追加します。

ホームページにカスタム投稿を含めた記事一覧にします。

pre_get_postsを使ってカスタム投稿を含めるので、functions.phpに以下を入れてカスタム投稿も含めます。

function change_posts_per_page($query) {
   /* 管理画面,メインクエリに干渉しないために必須 */
   if ( is_admin() || ! $query->is_main_query() ){
      return;
   }
   /* ホームページの場合、ポストタイプにカスタム投稿を含める */
   if ( $query->is_home() ) {
      $query->set( 'post_type', array('post' ,'maron') );
      return;
   }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

ホームページにお知らせを表示するウィジェットを追加します。

ホームページは、カスタム投稿を含めていることを表記するのに使っています。
親テーマからhome.phpをコピーしてきます。

【変更前】

<?php //トップページ用 ?>
<?php get_header(); ?>

<?php get_template_part('list') ?>

【変更後】

<?php //トップページ用 ?>
<?php get_header(); ?>

<? dynamic_sidebar('top_main_widget'); ?>

<?php get_template_part('list') ?>

functions.phpに以下を追加します。

if (function_exists('register_sidebar')){
    register_sidebar(array(
        'before_widget' => '<div class="top_main_widget" id="%1$s">'."\n",
        'after_widget' => '</div>'."\n",
        'before_title' => '<h1 id="archive-title">',
        'after_title' => '</h1>',
        'name' => 'トップメイン',
        'id' => 'top_main_widget'
    ));
}

style.cssに以下を追加します。

.top_main_widget {
  background-color:#eee;
  padding:10px;
  margin-bottom:10px;
}

次ににゃんきちブログ用のテンプレート(nyankichi-blog)を作成します。

・親テーマからindex.phpをコピーして名前をindex-nyankichi.phpに変更します。

index-nyankichi.phpの修正

テンプレート名(nyankichi-blog)、に変更します。

【修正前】

<?php //インデクスリスト用 ?>
<?php get_header(); ?>

<?php get_template_part('list') ?>

【修正後】

<?php
//  Template Name: nyankichi-blog
?>
<?php get_header(); ?>

<?php get_template_part('breadcrumbs-page'); //固定ページパンくずリスト?>

  <h1 id="archive-title">「 にゃんきち: ブログ 」一覧</h1>

<?php
$args = array(
     'post_type' => 'post', // 投稿タイプを指定
     'paged' => $paged,
); ?>
<?php
$wp_query = new WP_Query($args);
?>

<?php get_template_part('list') ?>

トップページと、にゃんきちブログの固定ページを作成し、作ったテンプレートを指定します。

WordPressの管理画面で固定ページを新規作成し、タイトル、パーマリンク、テンプレートを指定します。

  • トップページ用固定ページ
    タイトル:トップページ
    パーマリンク:top
    テンプレート:top-page

  • にゃんきちプログ用固定ページ
    タイトル:にゃんきちブログ
    パーマリンク:nyankichi
    テンプレート:nyankichi-blog

sinplicityのカスタマイズ画面で、固定ページのトップページがフロントになるようにします。
Wordpress管理画面->外観->カスタマイズ->固定フロントページにて変更します。

まろんブログのメニュー設定

メニューのまろんブログについては、カスタムリンクを使って作ります。

次回は、functions.phpへのカスタマイズについて「宅猫まろん用のカスタム投稿作成でのカスタマイズ(3)」に続く。

Monappy: MBDQ39VHypMQwfyR8SshuHvfPNUz321F6B

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください