投稿者: hayashikejinan

  • テーマを構成するテンプレート(single.php や page.php など)を作る。【テーマ作成 その⑥】

    テーマを構成するテンプレート(single.php や page.php など)を作る。【テーマ作成 その⑥】

    【テーマ作成 その⑤】からのつづきです。

     

    今回はテーマを構成するテンプレート(single.php や page.php など)を作っていきます。

    index.php をコピーして single, page を作成

    index.php だけだとちょっと困るんで、投稿用のテンプレートファイルである single.php、ページ用のテンプレートファイルの page.php を作ります。

    最初のコメントだけ書き変えてコピー→リネーム。

    <?php
    /**
     * 投稿のテンプレートファイル
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    
    get_header(); ?>
    
    <div class="wrapper clearfix">
    
    	<div class="main clearfix">
    
    		<?php
    		// content.php を読み込む
    		get_template_part( 'content' ); ?>
    
    	</div>
    	<!-- #main -->
    
    	<?php get_sidebar(); ?>
    
    </div>
    <!-- #wrapper -->
    
    <?php get_footer(); ?>

     

    <?php
    /**
     * 固定ページのテンプレートファイル
     *
     * 固定ページを表示するデフォルトのテンプレート
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    
    get_header(); ?>
    
    <div class="wrapper clearfix">
    
    	<div class="main clearfix">
    
    		<?php
    		// content.php を読み込む
    		get_template_part( 'content' ); ?>
    
    	</div>
    	<!-- #main -->
    
    	<?php get_sidebar(); ?>
    
    </div>
    <!-- #wrapper -->
    
    <?php get_footer(); ?>

     

    これで投稿・ページ用のテンプレートファイルが作成されました。簡単。

    抜粋と全文を出し分ける

    前々回 index.php を作成した後、ループ処理をテンプレート化しました。

    その時は抜粋表示だけさせる the_excerpt を使いましたけども、今の段階だと投稿テンプレートやページテンプレートでも抜粋になってしまってます。

    これね
    これね

     

    このままじゃよろしくないんで、single, page で表示を出し分けましょう。

    is_singular 関数を使う

    WordPress で使えるテンプレートタグ、ってやつです。

    この is_***** って関数は全て、判別するための関数なんですよ、べんり!

    is_singular は、is_single + is_page + is_attatchment 、つまり投稿とページと添付ファイルのテンプレートな時を判別してくれるやつです。

    これを前々回作成した content.php に実装します。

    振り分けを実装する

    content.php を編集。

    ※ソースコードを貼ってるところの先頭行に -が付いてるのは削除行、+が付いてるのは追加行になります。

    --- a/content.php
    +++ b/content.php
    @@ -24,7 +24,11 @@
     			</header>
     			<section>
    
    -				<?php the_excerpt(); // 記事の抜粋を表示 ?>
    +				<?php if ( is_singular() ) : ?>
    +					<?php the_content(); // 記事を表示 ?>
    +				<?php else: ?>
    +					<?php the_excerpt(); // 記事の抜粋を表示 ?>
    +				<?php endif; ?>
    
     			</section>
     			<footer>

     

    これで振り分けができましたー。

    comments.php は必須です。

    必須だよ、ということです。

    コメントのテンプレートで必要なのは、

    • コメントを送信するフォーム
    • コメントがあればループで表示

    です。

    フォームは一番簡単な方法で作ります。

    その方法は、WordPressで標準搭載されているコメントフォームを呼び出してあげる、です。

    フォームを呼び出す

    Codex の comment_form に詳しく書いてありますね。

    コメントはプラグインを使ってるブログがおそらく大多数だと思うんで、詳細は省いてあっさりいきます。

    <?php
    /**
     * コメントを表示するためのテンプレート
     *
     * コメント・コメントフォームの両方が含まれる。
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    ?>
    
    <?php comment_form(); // コメントフォームを呼び出す ?>

     

    コメントをループで表示する

    このままだとフォームしか出ず、コメントを書いても表示されません。

    コメントを表示させるループを実装しましょう。

    コメントはプラグインを使ってるブログがおそらく大多数だと思うんで、詳細は省 (ry

    Codex の Enhanced Comment Display を参考に。

    <?php
    /**
     * コメントを表示するためのテンプレート
     *
     * コメント・コメントフォームの両方が含まれる。
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    ?>
    
    <div id="comments" class="comments">
    
    	<?php
    	// パスワード保護機能のサポート
    	if ( post_password_required() ) {
    		echo '<p class="no-comments">この投稿はパスワードで保護されています。コメントを表示するには、パスワードを入力して下さい。</p>';
    		return;
    	}
    	?>
    
    	<?php if ( have_comments() ) : // コメントがある ?>
    		<h4 id="comment-title">
    			<?php comments_number(); ?>
    		</h4>
    		<ul class="comment-list">
    			<?php wp_list_comments(); ?>
    		</ul>
    		<div class="navigation">
    			<div class="alignleft"><?php previous_comments_link(); ?></div>
    			<div class="alignright"><?php next_comments_link(); ?></div>
    		</div>
    	<?php else : // コメントがない ?>
    		<?php if ( comments_open() ) : // コメントは公開状態だけどコメントがない ?>
    			<p>コメントはまだありません。</p>
    		<?php else : // コメント閉鎖中 ?>
    			<p>コメントは閉鎖されています。</p>
    		<?php endif; ?>
    	<?php endif; ?>
    
    </div>
    
    <?php comment_form(); // コメントフォームを呼び出す ?>

     

    こんな感じで。

    comment のループは Codex の have_comments あたりを参照。

    コメント欄をカスタマイズしたいなら wp_list_comments あたりも見とくといいはず。

    コメント返信用のスクリプトを header で enqueue する

    コメントフォームを実装したら、コメント返信用のスクリプトを呼び出す必要があります。

    別になくてもいいのですが、ない場合、返信ボタンを押すとページ遷移処理から返信への処理をしてしまうので、あったほうがいいやつです。

    今まで出てきていない関数、wp_enqueue を使います。

    この先詳しくやるんで今は言われるがまま header.php に記述。

    --- a/header.php
    +++ b/header.php
    @@ -31,6 +31,7 @@
    
     	<script src="<?php echo get_stylesheet_directory_uri(); ?>/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script>
    
    +	<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
     	<?php wp_head(); ?>
     </head>
     <body <?php body_class(); ?>>

     

    page, single.php で comments.php を呼び出す

    コメントのテンプレートファイルはもちろん、作っただけじゃ呼び出されませんので、呼び出してあげます。

    呼び出す関数は comments_template

    引数でファイル名やコメントの種類を分けるかどうかを指定できたりします。

    --- a/content.php
    +++ b/content.php
    @@ -40,3 +40,5 @@
    
     	<?php endwhile; ?>
     <?php endif; ?>
    +
    +<?php comments_template(); ?>

     

    ついでに投稿へのリンクを content.php に追加

    これまではサイトのトップ画面から各投稿に飛べなかったので、飛べるようにリンクをつける。

    --- a/content.php
    +++ b/content.php
    @@ -15,7 +15,11 @@
     		<article <?php post_class(); ?>>
     			<header>
    
    -				<h1><?php the_title(); ?></h1>
    +				<h1>
    +					<a href="<?php the_permalink(); ?>">
    +						<?php the_title(); ?>
    +					</a>
    +				</h1>
    
     				<time><?php the_time( 'Y.n.j' ); ?></time>

     

    これでやっと各投稿・コメントを見られるようになりましたー。

    こんな
    こんな

     

    だいぶ形ができあがってきたのでいい感じです。

    まだまだやることは山ほどありますが、次は2回目のテーマチェックとともに、functions.php を触っていきます。

    ここまでのzipがこちら、今までの履歴は Github でも辿れます。

  • Theme Check(1回目)をかけて css を修正あんど修正【テーマ作成 その⑤】

    Theme Check(1回目)をかけて css を修正あんど修正【テーマ作成 その⑤】

    【テーマ作成 その④】からのつづき。

     

    マイペースでのんびり説明入れながら復習しながら進んでます。

    色々と順番は前後してますけどそこは置いといていただければ。

    ※ソースコード貼ってるところの先頭行に -が付いてるのは削除行、+が付いてるのは追加行になります。

     

    Theme Check に基づいてみる(1回目

    テーマを作るための下準備・知っておいた方がいいこと で書きましたテーマチェックをかけて修正していきます。

    たくさん
    たくさん

     

    ということで1つ1つ解決していきます。

    コメントやシングル投稿のテンプレートはまだ作ってないのでそのへんは飛ばして、では。

    スクリーンショットがありません

    テーマフォルダ直下に screenshot.png なファイルを置けばいいです。

    スクリーンショットはテーマ選択画面等で出るやつ、サイズは 600×450 が推奨なのでそれに合わせて。

    screenshot.png を据えるとこんな感じに。

    テーマ画面に反映される
    テーマ画面に反映される

     

    コンテンツ幅が設定されていません

    Content Width (コンテンツの幅)は、WordPress 2.6から導入されたテーマ機能。

    テーマ内任意のoEmbedsや画像の最大許容幅を設定することができる機能。

    現在のメインコンテンツ、最大の幅は585px、 functions.php の先頭に書いておくことにします。

    diff --git a/functions.php b/functions.php
    --- a/functions.php
    +++ b/functions.php
    @@ -10,6 +10,14 @@
      */
    
     /**
    + * コンテンツエリアの最大許容幅を設定
    + *
    + * @since WordPress 2.6
    + */
    +if ( ! isset( $content_width ) )
    +	$content_width = 585;
    +
    +/**
      * 自動的にRSSフィードのリンクを挿入
      *
      * @since WordPress 3.0

     

    Content Width を追加したら推奨cssを追加してね、って書いてあるので追加。

    diff --git a/css/screen.css b/css/screen.css
    --- a/css/screen.css
    +++ b/css/screen.css
    @@ -69,6 +69,18 @@ body {
       margin: 0 5%;
     }
    
    +/* =================
    + * WordPress Styles
    + * ================= */
    +.size-auto,
    +.size-full,
    +.size-large,
    +.size-medium,
    +.size-thumbnail {
    +  max-width: 100%;
    +  height: auto;
    +}
    +
     /* ===================
      *  ALL: Orange Theme
      * =================== */
    
    diff --git a/sass/_main.sass b/sass/_main.sass
    --- a/sass/_main.sass
    +++ b/sass/_main.sass
    @@ -54,6 +54,18 @@ body
     	width: 90%
     	margin: 0 5%
    
    +/* =================
    + * WordPress Styles
    + * =================
    +
    +.size-auto,
    +.size-full,
    +.size-large,
    +.size-medium,
    +.size-thumbnail
    +	max-width: 100%
    +	height: auto
    +
     /* ===================
      *  ALL: Orange Theme
      * ===================

     

    このテーマではタグを表示していないようです

    タグはループにでも入れときますか、 the_tags でおk。

    diff --git a/content.php b/content.php
    --- a/content.php
    +++ b/content.php
    @@ -19,6 +19,8 @@
    
     				<time><?php the_time( 'Y.n.j' ); ?></time>
    
    +				<?php the_category(); ?>
    +
     			</header>
     			<section>
    
    @@ -27,7 +29,7 @@
     			</section>
     			<footer>
    
    -				<?php the_category(); ?>
    +				<?php the_tags(); ?>
    
     			</footer>
     		</article>

     

    テーマの css には *** の cssクラスが必要です

    • .alignright
    • .alignleft
    • .aligncenter
    • .wp-caption
    • .wp-caption-text
    • .sticky
    • .gallery-caption
    • .bypostauthor

    これらは必須のcssクラスで、それぞれ投稿画面で色々指定したとき、要素に付くクラスです。

    cssはそのうち整えることにして、Codexのものをそのままとりあえず記述。

    (.sticky, .gallery-caption, .bypostauthor はサンプルなかったんでてきとうに)

    diff --git a/css/screen.css b/css/screen.css
    --- a/css/screen.css
    +++ b/css/screen.css
    @@ -72,6 +72,88 @@ body {
     /* =================
      * WordPress Styles
      * ================= */
    +.alignnone {
    +  margin: 5px 20px 20px 0;
    +}
    +
    +.aligncenter, div.aligncenter {
    +  display: block;
    +  margin: 5px auto 5px auto;
    +}
    +
    +.alignright {
    +  float: right;
    +  margin: 5px 0 20px 20px;
    +}
    +
    +.alignleft {
    +  float: left;
    +  margin: 5px 20px 20px 0;
    +}
    +
    +.aligncenter {
    +  display: block;
    +  margin: 5px auto 5px auto;
    +}
    +
    +a img.alignright {
    +  float: right;
    +  margin: 5px 0 20px 20px;
    +}
    +a img.alignnone {
    +  margin: 5px 20px 20px 0;
    +}
    +a img.alignleft {
    +  float: left;
    +  margin: 5px 20px 20px 0;
    +}
    +a img.aligncenter {
    +  display: block;
    +  margin-left: auto;
    +  margin-right: auto;
    +}
    +
    +.wp-caption {
    +  background: white;
    +  border: 1px solid #f0f0f0;
    +  max-width: 96%;
    +  /* Image does not overflow the content area */
    +  padding: 5px 3px 10px;
    +  text-align: center;
    +}
    +.wp-caption.alignnone, .wp-caption.alignleft {
    +  margin: 5px 20px 20px 0;
    +}
    +.wp-caption.alignright {
    +  margin: 5px 0 20px 20px;
    +}
    +.wp-caption img {
    +  border: 0 none;
    +  height: auto;
    +  margin: 0;
    +  max-width: 98.5%;
    +  padding: 0;
    +  width: auto;
    +}
    +.wp-caption p.wp-caption-text {
    +  font-size: 11px;
    +  line-height: 17px;
    +  margin: 0;
    +  padding: 0 4px 5px;
    +}
    +
    +.sticky time {
    +  display: none;
    +}
    +
    +.gallery-caption {
    +  padding: 0;
    +}
    +
    +.bypostauthor {
    +  background-color: #e44d26;
    +}
    +
     .size-auto,
     .size-full,
     .size-large,
    
    diff --git a/sass/_main.sass b/sass/_main.sass
    --- a/sass/_main.sass
    +++ b/sass/_main.sass
    @@ -58,6 +58,73 @@ body
      * WordPress Styles
      * =================
    
    +.alignnone
    +	margin: 5px 20px 20px 0
    +
    +.aligncenter, div.aligncenter
    +	display: block
    +	margin: 5px auto 5px auto
    +
    +.alignright
    +	float: right
    +	margin: 5px 0 20px 20px
    +
    +.alignleft
    +	float: left
    +	margin: 5px 20px 20px 0
    +
    +.aligncenter
    +	display: block
    +	margin: 5px auto 5px auto
    +
    +a img
    +	&.alignright
    +		float: right
    +		margin: 5px 0 20px 20px
    +	&.alignnone
    +		margin: 5px 20px 20px 0
    +	&.alignleft
    +		float: left
    +		margin: 5px 20px 20px 0
    +	&.aligncenter
    +		display: block
    +		margin-left: auto
    +		margin-right: auto
    +
    +.wp-caption
    +	background: #fff
    +	border: 1px solid #f0f0f0
    +	max-width: 96%
    +	/* Image does not overflow the content area
    +	padding: 5px 3px 10px
    +	text-align: center
    +	&.alignnone, &.alignleft
    +		margin: 5px 20px 20px 0
    +	&.alignright
    +		margin: 5px 0 20px 20px
    +	img
    +		border: 0 none
    +		height: auto
    +		margin: 0
    +		max-width: 98.5%
    +		padding: 0
    +		width: auto
    +	p.wp-caption-text
    +		font-size: 11px
    +		line-height: 17px
    +		margin: 0
    +		padding: 0 4px 5px
    +
    +.sticky
    +	time
    +		display: none
    +
    +.gallery-caption
    +	padding: 0
    +
    +.bypostauthor
    +	background-color: #e44d26
    +
     .size-auto,
     .size-full,
     .size-large,

     

    とりあえずここまでやれば基本的なテストをパスできます。

    まだ注意や必須の項目が残っていますが、現状 index.php しかないのでまた後ほど。

    css を整える

    ある程度形がまとまってきたので一旦見た目を整えることに。

    現状こんな。

    リンク色がでふぉ(´・ω・`)
    リンク色がでふぉ(´・ω・`)

    ついでに sass も整理して、と。

    diff --git a/css/screen.css b/css/screen.css
    --- a/css/screen.css
    +++ b/css/screen.css
    @@ -1,3 +1,4 @@
    +@charset "UTF-8";
     /* ==========================================================================
      * Normalize
      * ========================================================================== */
    @@ -61,7 +62,7 @@ textarea {
      * Author: Jonathan Verrecchia - verekia.com/initializr/responsive-template
      * ========================================================================== */
     body {
    -  font: 16px/26px Helvetica, Helvetica Neue, Arial;
    +  font: 16px/26px "Lucida Grande", "segoe UI", "ヒラギノ丸ゴ ProN W4", "Hiragino Maru Gothic ProN", Meiryo, Arial, sans-serif;
     }
    
     .wrapper {
    @@ -76,7 +77,8 @@ body {
       margin: 5px 20px 20px 0;
     }
    
    -.aligncenter, div.aligncenter {
    +.aligncenter,
    +div.aligncenter {
       display: block;
       margin: 5px auto 5px auto;
     }
    @@ -166,6 +168,31 @@ a img.aligncenter {
     /* ===================
      *  ALL: Orange Theme
      * =================== */
    +a {
    +  color: #f16529;
    +  text-decoration: none;
    +}
    +a:hover, a:visited {
    +  color: #f16529;
    +}
    +a:hover {
    +  text-decoration: underline;
    +}
    +
    +a,
    +a img {
    +  -webkit-transition: all 0.3s ease;
    +  -webkit-transition-delay: 0s;
    +  -moz-transition: all 0.3s ease 0s;
    +  -o-transition: all 0.3s ease 0s;
    +  transition: all 0.3s ease 0s;
    +}
    +
    +a:hover img {
    +  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
    +  opacity: 0.8;
    +}
    +
     .header-container {
       border-bottom: 20px solid #e44d26;
     }
    @@ -227,6 +254,16 @@ nav a:hover {
       color: white;
       padding: 0 5% 10px;
     }
    +.sidebar a {
    +  text-decoration: none;
    +  color: white;
    +}
    +.sidebar a:hover, .sidebar a:visited {
    +  color: white;
    +}
    +.sidebar a:hover {
    +  text-decoration: underline;
    +}
    
     .widget {
       margin: 0 0 30px;
    diff --git a/sass/_main.sass b/sass/_main.sass
    --- a/sass/_main.sass
    +++ b/sass/_main.sass
    @@ -7,7 +7,7 @@ button,
     input,
     select,
     textarea
    -	color: #222
    +	color: $base-font-color
    
     body
     	font-size: 1em
    @@ -48,7 +48,7 @@ textarea
      * ==========================================================================
    
     body
    -	font: 16px / 26px Helvetica, Helvetica Neue, Arial
    +	font: 16px / 26px $font-family-maru-gothic
    
     .wrapper
     	width: 90%
    @@ -61,7 +61,8 @@ body
     .alignnone
     	margin: 5px 20px 20px 0
    
    -.aligncenter, div.aligncenter
    +.aligncenter,
    +div.aligncenter
     	display: block
     	margin: 5px auto 5px auto
    
    @@ -123,7 +124,7 @@ a img
     	padding: 0
    
     .bypostauthor
    -	background-color: #e44d26
    +	background-color: $base-color-dark
    
     .size-auto,
     .size-full,
    @@ -137,17 +138,34 @@ a img
      *  ALL: Orange Theme
      * ===================
    
    +a
    +	color: $link-color
    +	text-decoration: none
    +	&:hover,
    +	&:visited
    +		color: $link-color
    +	&:hover
    +		text-decoration: underline
    +
    +a,
    +a img
    +	@include transition(all 0.3s ease 0s)
    +
    +a:hover
    +	img
    +		@include opacity(0.8)
    +
     .header-container
    -	border-bottom: 20px solid #e44d26
    +	border-bottom: 20px solid $base-color-dark
    
     .footer-container,
     .sidebar aside
    -	border-top: 20px solid #e44d26
    +	border-top: 20px solid $base-color-dark
    
     .header-container,
     .footer-container,
     .sidebar aside
    -	background: #f16529
    +	background: $base-color
    
     .title
     	color: white
    @@ -168,7 +186,7 @@ nav
     		text-decoration: none
     		font-weight: bold
     		color: white
    -		background: #e44d26
    +		background: $base-color-dark
     		&:hover,
     		&:visited
     			color: white
    @@ -194,6 +212,14 @@ nav
     	aside
     		color: white
     		padding: 0 5% 10px
    +	a
    +		text-decoration: none
    +		color: white
    +		&:hover,
    +		&:visited
    +			color: white
    +		&:hover
    +			text-decoration: underline
    
     .widget
     	margin: 0 0 30px
    diff --git a/sass/_mixins.sass b/sass/_mixins.sass
    --- /dev/null
    +++ b/sass/_mixins.sass
    @@ -0,0 +1,4 @@
    +@charset "UTF-8"
    +//
    +// ミックスイン
    +// --------------------------------------------------
    diff --git a/sass/_variables.sass b/sass/_variables.sass
    --- /dev/null
    +++ b/sass/_variables.sass
    @@ -0,0 +1,29 @@
    +@charset "UTF-8"
    +//
    +// 変数
    +//
    +
    +// 色
    +$base-color: #f16529
    +$base-color-dark: #e44d26
    +
    +// リンク
    +$link-color: #f16529 !default
    +$link-hover-color: lighten($link-color, 15%) !default
    +$link-visited-color: darken($link-color, 15%) !default
    +
    +$selected-font-color: #fff !default
    +$selected-background-color: #ff5e99 !default
    +
    +$invalid-background-color: #f0dddd !default
    +
    +// 文字体裁
    +$font-family-sans-serif: Helvetica, Helvetica Neue, Arial !default
    +$font-family-serif: Georgia, "Times New Roman", Times, serif !default
    +$font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace !default
    +$font-family-maru-gothic: "Lucida Grande", "segoe UI", "ヒラギノ丸ゴ ProN W4", "Hiragino Maru Gothic ProN", Meiryo, Arial, sans-serif
    +$font-family-kaku-gothic: "Helvetica Neue", Helvetica, "Lao UI", "ヒラギノ角ゴ ProN W3", "Hiragino Kaku Gothic ProN", Meiryo, Verdana, Arial, sans-serif
    +
    +$base-line-height: 1.4 !default
    +$base-font-color: #222 !default
    +$base-font-size: 1em !default
    diff --git a/sass/screen.sass b/sass/screen.sass
    --- a/sass/screen.sass
    +++ b/sass/screen.sass
    @@ -2,6 +2,10 @@
    
     // Compass Support
     @import compass
    +// 変数
    +@import variables
    +// ミックスイン
    +@import mixins
    
     /* ==========================================================================
      * Normalize
    --

     

    長いです(´∀`)

    sass わかんない人は css だけ変えればいいかと。

    これでちゃんとリンク色がうまい感じに。

    うむ。
    うむ。

     

    ぼちぼちですけども順調。

    次回は基本テンプレートファイル、single.phpやpage.php、comment.php等作っていきます。

    ここまでのzipをダウンロード

    コードだけ追えればいい&見やすいのが見たい ってひとは Github のコミット を参照ください。

  • DAHON IOS P8 っていう折りたたみ自転車を街乗り&輪行用に買ったんよ!

    DAHON IOS P8 っていう折りたたみ自転車を街乗り&輪行用に買ったんよ!

    買うた。

    記念撮影
    記念撮影

     

    イギリスからはるばる。

    剛性充分。

    スポークの反射板すら外してないけども。

    余ってるサドルを着けたりするんだー。

    IOS-P8-4363
    Selle Anatomica の TITANICO

     

    この自転車のことは別の所で書こうっと。

    参考動画。

  • Feedly の API が開発者向けに公開された模様。

    Feedly の API が開発者向けに公開された模様。

    2013/09/18、公開されました。

    公式ブログにてお知らせが。

    公開された Feedly API のページがこちら

    さらっと見てみました、Feedly 上で使われているであろう全ての(おそらく)API があり。

    これは色々はかどりそうな。

    開発者には朗報ですね。

    短文ですがこれにて。

  • WordPress マルチサイト機能を使ったんで、手順・やったことをまとめて綴ります

    WordPress マルチサイト機能を使ったんで、手順・やったことをまとめて綴ります

    WordPress 3.0 から搭載されたマルチサイト機能、出た当初にうれしがって遊んだっきり触ってませんでした。

    しかしWPのバージョンアップに伴った諸機能の充実、マルチサイト対応プラグインが増えた ということもあり、そろそろ真面目に触ってみようかなーということで。

     

    マルチサイトとは

    端的に読み解くとですね、WordPress をサーバーに一つだけインストールして設定すれば、複数の仮想サイトを作成できる

    っという仕組みです、プラグインやテーマは共用できるので1回入れるだけ。

    マルチサイトを使わずに複数サイトを作ろうと思うと、こういうディレクトリ構造になっちゃいますよね。

    /www/
    ├─wordpress1
    │  ├─wp-admin
    │  ├─wp-content
    │  └─wp-includes
    ├─wordpress2
    │  ├─wp-admin
    │  ├─wp-content
    │  └─wp-includes
    ├─wordpress3
    │  ├─wp-admin
    │  ├─wp-content
    │  └─wp-includes
    ├─wordpress4
    │  ├─wp-admin
    │  ├─wp-content
    │  └─wp-includes
    └─wordpress∞
          …

    しかもそれぞれにテーマとプラグインを入れなきゃいけないという…。

     

    マルチサイト化するメリット・デメリット

    とまぁそんなおいしい話ばっかりなわけでなく。

    メリットの裏にはやっぱりデメリットもあったり、考えてみました。

     

    メリット

    • 複数サイトを運用する時に便利
    • サーバーのディレクトリがすっきり
    • メンテナンスの手間減
    • 使い方、サーバー次第で他の人がブログ開設できたり

     

    デメリット

    • 初期設定がちょっとだけめんどう
    • マルチサイト非対応プラグインがある
    • 既存のサイトをマルチサイト化するのは若干ハードルが上がる
    • 慣れないうちは色々と罠に嵌まりかねない
    • 別ドメインで運用するときはプラグインで設定しないといけない

     

    こんな感じですかね、既存サイトを切り替えて…っていうのは不意のトラブルに対応できる自信がないとしんどそう。

     

    マルチサイトを設定

    さて、やっていきます。

     

    今回マルチサイト化する要件

    とりかかったマルチサイトの仕様を一応書いておきます。

    WordPress 3.6.1 日本語版
    サーバー さくらレンタルサーバー
    マルチサイト種類 サブドメインでマルチサイト化
    構成 WordPress 新規インストール後

    ということで、上記条件を前提に始めていきます。

     

    ステップ0: 始める前に

    おなじみの WordPress Codex。

    Codex の通りにやっていきます。

     

    ステップ1: WordPress を準備する

    WordPress はインストールしてDB設定やら終わってる段階なことを確認。

    既存サイトをマルチサイト化するときはデータベース・アップロードしたファイルのバックアップをとっておくこと。

    って書いてますけども、今回は新規なのでスルー。

     

    ステップ2: マルチサイトを有効化

    マルチサイト、デフォルトでは定義されていません。

    なので wp-config.php で定義しなきゃいけません、WordPressをインストールしたフォルダ直下にあります。

    テキストエディタで開いて、4行追加しました(あとでわかりやすいようコメントを付けておく

    <?php
    /**
     * WordPress の基本設定
     *
     * このファイルは、MySQL、テーブル接頭辞、秘密鍵、言語、ABSPATH の設定を含みます。
     * より詳しい情報は {@link http://wpdocs.sourceforge.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86 
     * wp-config.php の編集} を参照してください。MySQL の設定情報はホスティング先より入手できます。
     *
     * このファイルはインストール時に wp-config.php 作成ウィザードが利用します。
     * ウィザードを介さず、このファイルを "wp-config.php" という名前でコピーして直接編集し値を
     * 入力してもかまいません。
     *
     * @package WordPress
     */
    
    // 注意: 
    // Windows の "メモ帳" でこのファイルを編集しないでください !
    // 問題なく使えるテキストエディタ
    // (http://wpdocs.sourceforge.jp/Codex:%E8%AB%87%E8%A9%B1%E5%AE%A4 参照)
    // を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。
    
    // ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
    /** WordPress のためのデータベース名 */
    define('DB_NAME', '****');
    
    /** MySQL データベースのユーザー名 */
    define('DB_USER', '****');
    
    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', '****');
    
    /** MySQL のホスト名 */
    define('DB_HOST', '****');
    
    /** データベースのテーブルを作成する際のデータベースの文字セット */
    define('DB_CHARSET', 'utf8');
    
    /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
    define('DB_COLLATE', '');
    
    /**#@+
     * 認証用ユニークキー
     *
     * それぞれを異なるユニーク (一意) な文字列に変更してください。
     * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
     * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。
     *
     * @since 2.6.0
     */
    define('AUTH_KEY',         '****************************************************************');
    define('SECURE_AUTH_KEY',  '****************************************************************');
    define('LOGGED_IN_KEY',    '****************************************************************');
    define('NONCE_KEY',        '****************************************************************');
    define('AUTH_SALT',        '****************************************************************');
    define('SECURE_AUTH_SALT', '****************************************************************');
    define('LOGGED_IN_SALT',   '****************************************************************');
    define('NONCE_SALT',       '****************************************************************');
    
    /**#@-*/
    
    /**
     * WordPress データベーステーブルの接頭辞
     *
     * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
     * インストールすることができます。半角英数字と下線のみを使用してください。
     */
    $table_prefix  = 'wp_';
    
    /**
     * ローカル言語 - このパッケージでは初期値として 'ja' (日本語 UTF-8) が設定されています。
     *
     * WordPress のローカル言語を設定します。設定した言語に対応する MO ファイルが
     * wp-content/languages にインストールされている必要があります。たとえば de_DE.mo を
     * wp-content/languages にインストールし WPLANG を 'de_DE' に設定すると、ドイツ語がサポートされます。
     */
    define('WPLANG', 'ja');
    
    /**
     * 開発者へ: WordPress デバッグモード
     *
     * この値を true にすると、開発中に注意 (notice) を表示します。
     * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
     */
    define('WP_DEBUG', false);
    
    /**
     * マルチサイト有効化
     */
    define( 'WP_ALLOW_MULTISITE', true );
    
    /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
    
    /** Absolute path to the WordPress directory. */
    if ( !defined('ABSPATH') )
    	define('ABSPATH', dirname(__FILE__) . '/');
    
    /** Sets up WordPress vars and included files. */
    require_once(ABSPATH . 'wp-settings.php');
    define( 'WP_ALLOW_MULTISITE', true );
    define( ‘WP_ALLOW_MULTISITE’, true );

     

    定義を追加して保存、サイトの管理画面にアクセスしブラウザのリロードをして次へ。

    (ついでに wp-config.php のパーミッションを404にしておくといいです)

     

    ステップ3: ネットワークを設置

    マルチサイトの定義 管理画面 > ツール > ネットワークの設置 という項目が追加されてます。

    あるね
    あるね

     

    サブドメインかサブディレクトリを選択、新たに作りたいマルチサイトの名前・管理者のアドレスを入力。

    1人だけで管理するならWordPress初期インストール時と同じメールアドレスを入力すればいいです。

    選んだり入力したり
    選んだり入力したり

     

    しっかり確認してインストールをクリック

     

    ステップ4: ネットワークを有効化

    画面が遷移しまして、有効化なう、な画面へ。

    ネットワークの作成
    ネットワークの作成

     

    「2つやらんといけんことがあるんよ」

    ということなのでひとつずつ。

     

    wp-config.php に指定されたコードを追加。コピペでおk。

    ぼくは律儀にコメントを付けて、さっき定義した下に貼り付けました。

    <?php
    /**
     * WordPress の基本設定
     *
     * このファイルは、MySQL、テーブル接頭辞、秘密鍵、言語、ABSPATH の設定を含みます。
     * より詳しい情報は {@link http://wpdocs.sourceforge.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86 
     * wp-config.php の編集} を参照してください。MySQL の設定情報はホスティング先より入手できます。
     *
     * このファイルはインストール時に wp-config.php 作成ウィザードが利用します。
     * ウィザードを介さず、このファイルを "wp-config.php" という名前でコピーして直接編集し値を
     * 入力してもかまいません。
     *
     * @package WordPress
     */
    
    // 注意: 
    // Windows の "メモ帳" でこのファイルを編集しないでください !
    // 問題なく使えるテキストエディタ
    // (http://wpdocs.sourceforge.jp/Codex:%E8%AB%87%E8%A9%B1%E5%AE%A4 参照)
    // を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。
    
    // ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
    /** WordPress のためのデータベース名 */
    define('DB_NAME', '****');
    
    /** MySQL データベースのユーザー名 */
    define('DB_USER', '****');
    
    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', '****');
    
    /** MySQL のホスト名 */
    define('DB_HOST', '****');
    
    /** データベースのテーブルを作成する際のデータベースの文字セット */
    define('DB_CHARSET', 'utf8');
    
    /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
    define('DB_COLLATE', '');
    
    /**#@+
     * 認証用ユニークキー
     *
     * それぞれを異なるユニーク (一意) な文字列に変更してください。
     * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
     * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。
     *
     * @since 2.6.0
     */
    define('AUTH_KEY',         '****************************************************************');
    define('SECURE_AUTH_KEY',  '****************************************************************');
    define('LOGGED_IN_KEY',    '****************************************************************');
    define('NONCE_KEY',        '****************************************************************');
    define('AUTH_SALT',        '****************************************************************');
    define('SECURE_AUTH_SALT', '****************************************************************');
    define('LOGGED_IN_SALT',   '****************************************************************');
    define('NONCE_SALT',       '****************************************************************');
    
    /**#@-*/
    
    /**
     * WordPress データベーステーブルの接頭辞
     *
     * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
     * インストールすることができます。半角英数字と下線のみを使用してください。
     */
    $table_prefix  = 'wp_';
    
    /**
     * ローカル言語 - このパッケージでは初期値として 'ja' (日本語 UTF-8) が設定されています。
     *
     * WordPress のローカル言語を設定します。設定した言語に対応する MO ファイルが
     * wp-content/languages にインストールされている必要があります。たとえば de_DE.mo を
     * wp-content/languages にインストールし WPLANG を 'de_DE' に設定すると、ドイツ語がサポートされます。
     */
    define('WPLANG', 'ja');
    
    /**
     * 開発者へ: WordPress デバッグモード
     *
     * この値を true にすると、開発中に注意 (notice) を表示します。
     * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
     */
    define('WP_DEBUG', false);
    
    /**
     * マルチサイト有効化
     */
    define( 'WP_ALLOW_MULTISITE', true );
    
    /**
     * マルチサイトのための定数を定義
     */
    define('MULTISITE', true);
    define('SUBDOMAIN_INSTALL', true);
    define('DOMAIN_CURRENT_SITE', '****'); // 設置するドメインによって違います
    define('PATH_CURRENT_SITE', '/');
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);
    
    /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
    
    /** Absolute path to the WordPress directory. */
    if ( !defined('ABSPATH') )
    	define('ABSPATH', dirname(__FILE__) . '/');
    
    /** Sets up WordPress vars and included files. */
    require_once(ABSPATH . 'wp-settings.php');
    こういうかんじ
    こういうかんじ

     

    次は .htaccess に指定されたコードを追加( wp-config.php と同じ階層にあるよ

    なんですけども、ちょっとわかりづらいので詳しく。

    WordPress のインストール時にそもそも .htaccess は作られてるんですよね↓

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress

     

    で、どこを書き変えるかと言うと、 <IfModule mod_rewrite.c> ~ </IfModule> の間にあるのを全て置き換えるってことです。

    つまりこういう感じ(13行目の *** 部分は各々違いますのでちゃんと指定されたものをコピペしてください

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^(wp-(content|admin|includes).*) ***/$1 [L]
    RewriteRule ^(.*\.php)$ ***/$1 [L]
    RewriteRule . index.php [L]
    </IfModule>
    
    # END WordPress

     

    ファイルを書き変え、アップロードする必要があるならした後、ログインしなおす。

    くりっく!
    くりっく!

     

    ステップ5: ネットワーク設定

    無事再ログインできたら管理バーに ”参加サイト” が追加されているはずです。

    されてない場合何かしら間違ってると思われるのでやりなおしましょう。

    で、でた~
    で、でた~

     

    ちゃんと出てればOKです。

    もはやマルチサイトはその手の中に。

     

    ステップ6: 管理

    テーマやプラグインの管理等、必要なものを設定してねーと書いてましたので一例を。

     

    テーマはネットワークから有効化しないとマルチサイトで使えません。

    こんな画面
    こんな画面

     

    プラグインはネットワークで有効にすると、ネットワーク内のサイトにサイレントで導入されます。

    ネットワークから有効にしたプラグインはマルチサイトから停止できません、その代わりネットワーク内のサイト全てに導入されるので、必須プラグインを有効化しておけばいいです。

    ぷらぐいんがめん
    ぷらぐいんがめん

     

    あとは細かく管理者が設定できるので色々試してみてください。

     

    ホホまとめ

    サブドメインでのマルチサイト作成でしたー。

    マルチサイトはこれから流行ってくるんじゃないでしょうか?(もしかしてもう流行ってます??

    とりあえず、マルチサイトを動かすことでまた新たに知識・技術が向上すればいいなと思います。

    本格ビジネスサイトを作りながら学ぶ WordPressの教科書
    プライム・ストラテジー株式会社
    ソフトバンククリエイティブ
    売り上げランキング: 13,125

    WordPress の教科書、参考になると思いますよ。

  • WordPress Bootstrap テーマを使う機会があったのでついでにフォークして色々直したり日本語化したり。

    WordPress Bootstrap テーマを使う機会があったのでついでにフォークして色々直したり日本語化したり。

    便利ですよね、Bootstrap

    WordPressのテーマでも Bootstrap を踏襲してるものがあったり。

    Sass WordPress Bootstrap

    ぼくは less より sass に慣れてるんで sass のほう。

    sass wordpress bootstrap ( less なら320pressさんのが。

    こんなやつ
    こんなやつ

     

    ただちょっと問題が

    ようしWordPress Bootstrap を元に制作ーと思ったら、ちょっとよろしくない点を発見。

    デバッグモードでエラーが出る(テーマのバグ

    ローカル環境の WordPress では基本デバッグモードにしてるんで、エラー出ると気持ち悪いんですよね。

    これとか
    これとか
    これ
    これ

    日本語リソースは入ってない

    まぁよくあるパターン。

    日付表記とか
    日付表記とか
    検索のとこだとか。
    検索のとこだとか。
    テーマ設定。
    テーマ設定。

    これをそのままに使うのはちょっとあれなんで直して使いました。

    元のをフォークして色々直したよ!

    エラー箇所を修正したり日本語化したり。

    日本語にしたアル
    日本語にしたアル
    ほう
    ほう
    うむ
    うむ

    ちゃんとできたよ(∩´∀`)∩ワーイ

     

    ということで Github の元リポジトリをフォークしまして、直したところをプッシュプッシュ。

    フォーク先がこちら、右下の Download.zip で変更後がダウンロードできます。

    ホホまとめ

    今回のまとめは簡潔に。

    「使いにくいな、と思ったら自分で直せばいいじゃん」

    まとめでした。

  • 広島カープAクラスに残れそうですね。広島カープといえばぼく、服を買いまして。

    広島カープAクラスに残れそうですね。広島カープといえばぼく、服を買いまして。

    今年まで15年連続Bクラスに甘んじていましたけども、ようやっとAクラスいけそう。

    ほんと喜ばしいことで。

     

    なぜカープファンになったかって、物心ついた時には何故かカープの野球帽を被っていたから。

    理由なんてそんなもんですよ。

     

    奇跡のコラボレーション

    ちなみにぼくは自転車も好きでして。

    ある日飛び込んで来たニュースが。

    これはドンピシャすぎた。

    自転車 x カープという考えられないコラボレーション。

    これは買うしかないやろこんなもん!ていうかどの層狙ってんのかいっこもわからへん。

    と思いつつ予約。

    わりと本気で悩んだけど受け付け最終日に申し込む。



    待つこと2ヶ月弱、発送通知が!

    ドヤァ
    ドヤァ

     

    受注日、5/26。上で書いたように受け付け最終日。

    受注明細番号はなんと1番。(´・ω`・)エッ? いちばん…?

    もしかしてぼくの他に誰も買ってない…?

     

    気をとりなおしてサイクルジャージ写真撮影

    撮るよね。撮るよ。

    風にたなびくジャージ。素晴らしい。

    (*´Д`)ハァハァ
    (*´Д`)ハァハァ

     

    ヘルメットの違和感が全くあれへん見事なデザイン。

    (:.;゚;Д;゚;.:)ハァハァ
    (:.;゚;Д;゚;.:)ハァハァ

     

    限定商品ていいよね。

    まさかもう売ってたりせーへんやろ、と思ってJ-SPORTSオンラインを再度見てみる。

    広島東洋カープ×J SPORTSコラボウエア:サイクルジャージ:Tシャツ:ジェイ・スポーツ オンラインショップ

    長袖売ってた…全然チェックしてへんかった。

    7/5~7/24 までの予約でしたとさ(´;ω;`)ウッ…

     

    スクロールしてみた

    ん…?
    ん…?

     

    限定再販中…だ…と…?
    限定再販中…だ…と…?

     

    これまじか

    受注番号から考えたら買った人おそらく1桁やん

    てことはさ、あまりの売れ無さっぷりに再販せざるを得ーへんかっただけちゃうの

    つまり長袖を買いそびれたけど、もう1回チャンスあるんちゃう?もしかして。

    カープメガネも売ってるらしく

    某今村だけがわかるブログの方に教えてもらいました。

    こ…これも買うしか!

    ホホまとめ

    長袖が売ってたなんて全然知らなくってガッカリしてましたけど、もうワンチャンあるで!な記事でした。

    こういったコラボレーショングッズとか限定品ってやっぱりそそられますよねぇ。

    商売の云々も学んでいかんとなーと思いました。

     

    ちなみに広島カープは15年連続Bクラスをいよいよ脱出できそうです。

  • ループ処理の追加・テンプレート化とサイドバーの定義を【テーマ作成 その④】

    ループ処理の追加・テンプレート化とサイドバーの定義を【テーマ作成 その④】

    【テーマ作成 その③】つづき。

     

    投稿内容等を表示させるようにテンプレートタグを書いていきます。

    サンプルデータとしてテストデータ(過去記事参照)をあらかじめ突っ込んでおくといいです。

    ※ソースコード貼ってるところの先頭行に -が付いてるのは削除行、+が付いてるのは追加行になります。

    index.php ループ

    現時点ではテーマ、何一つWordPressで追加した投稿・ページ等出力されません。

    ので、そのへんを。

    The Loop、ループ処理について

    ループで投稿を表示するためにWordPressで使用するphpコードですな。

    一番ポピュラーなのがこの形、投稿があれば表示設定で設定した最大数分回ります。

    <?php if ( have_posts() ) : ?>
    	<?php while ( have_posts() ) : the_post(); ?>
    		<!-- ここでループ処理 -->
    	<?php endwhile; ?>
    <?php endif; ?>

    if や while は基本的なプログラム構文ですね。

    index.php にループを追加

    index.php を開いて、↑のループを記述してみます。

    <?php
    /**
     * メインのテンプレートファイル
     *
     * WordPressテーマに必要な2つのテンプレートファイルのうち最も基本的なもの(もう一つは style.css)。
     * 特定のクエリに一致しない時にページを表示するため読み込まれる。
     * 例: home.phpファイルが存在しない時に使われる。
     * 詳しくは Codex へ: http://codex.wordpress.org/Template_Hierarchy
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    
    get_header(); ?>
    
    <div class="main wrapper clearfix">
    
    	<?php if ( have_posts() ) : ?>
    		<?php while ( have_posts() ) : the_post(); ?>
    
    			<article>
    				~ 省略 ~
    			</article>
    
    		<?php endwhile; ?>
    	<?php endif; ?>
    
    	<?php get_sidebar(); ?>
    
    </div>
    <!-- #main -->
    
    <?php get_footer(); ?>

     

    ループ内に the_excerpt を記述

    the_excerpt は記事の抜粋を出力する関数。

    記事全文を出力する the_content  もありますね、the_content はおいおい作る single.php や page.php で使います。

    diff --git a/index.php b/index.php
    --- a/index.php
    +++ b/index.php
    @@ -25,14 +25,9 @@
     					<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec.</p>
     				</header>
     				<section>
    -					<h2>article section h2</h2>
    
    -					<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices. Proin in est sed erat facilisis pharetra.</p>
    -				</section>
    -				<section>
    -					<h2>article section h2</h2>
    +					<?php the_excerpt(); // 記事の抜粋を表示 ?>
    
    -					<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices. Proin in est sed erat facilisis pharetra.</p>
     				</section>
     				<footer>
     					<h3>article footer h3</h3>

     

     

    the_title, the_time, the_category の記述

    Codex曰く入れといた方がいいよ、ってことなんで記述。

    それぞれループ内でのみ使える関数です。

    • the_title…記事タイトルを出力
    • the_time…投稿日を出力
    • the_category…記事のカテゴリまたはカテゴリへのリンクを出力

    見た目を整えるのは後回し、htmlタグや css の説明はスルー。

    フレームワークに元々書いてあったダミーテキスト部分を消して書き変えるとこんな感じに。

    ~略~
    			<article>
    				<header>
    
    					<h1><?php the_title(); ?></h1>
    
    					<time><?php the_time( 'Y.n.j.' ); ?></time>
    
    				</header>
    				<section>
    
    					<?php the_excerpt(); // 記事の抜粋を表示 ?>
    
    				</section>
    				<footer>
    
    					<?php the_category(); ?>
    
    				</footer>
    			</article>
    ~略~

     

    the_time の引数は phpの当該ドキュメントを参照。

    本来は多言語化できる書き方にしたほうがいいのですが説明めんどくさいため一旦これで。

    トップページにアクセスしてみると、無事ループが。

    ループされましたー
    ループされましたー

     

    このループで一応、日付別アーカイブやカテゴリアーカイブもリンク次第で勝手にループしてくれます。

    記事の要素に <?php post_class(); ?> を付ける

    投稿のスタイルを css で制御したいときに使う。

    ループ内のhtmlタグに追加すれば、投稿タイプに応じたクラスが付加される関数。

    記事をくくってる <article> なhtml5タグのところに付けておく。

    -			<article>
    +			<article <?php post_class(); ?>>

     

    ループ部分をテンプレート化

    ループ部分ができました、ただこのままでは使い回せないので、ループ部分をテンプレート化します。

    テンプレート化って難しそうですけどなんてことはなく、ただファイルを分けて、分けたファイルを読み込むだけです。簡単!

    コンテンツ部分を分けるのでファイル名 content.php を作成。

    index.php から該当部分をまるごとコピー。

    <?php
    /**
     * コンテンツループのテンプレートファイル
     *
     * ループを条件別に
     *
     * @package    WordPress
     * @subpackage Hoho
     */
    ?>
    
    <?php if ( have_posts() ) : ?>
    	<?php while ( have_posts() ) : the_post(); ?>
    
    		<article <?php post_class(); ?>>
    			<header>
    
    				<h1><?php the_title(); ?></h1>
    
    				<time><?php the_time( 'Y.n.j' ); ?></time>
    
    				<?php the_category(); ?>
    
    			</header>
    			<section>
    
    				<?php the_excerpt(); // 記事の抜粋を表示 ?>
    
    			</section>
    			<footer>
    
    				<?php the_tags(); ?>
    
    			</footer>
    		</article>
    
    	<?php endwhile; ?>
    <?php endif; ?>

     

    して、index.php からそれを読み込む。

     	<div class="main clearfix">
    
    		<?php
    		// content.php を読み込む
    		get_template_part( 'content' ); ?>
    
     	</div>
     	<!-- #main -->

     

    読み込む時は get_template_part を使うといいです。

    今後 get_template_part はふんだんに使っていくことになるはずなんでおいおい。

    サイドバーを調整

    さて、基本的なループが実装されたのでサイドバーへ。

    サイドバーがカラム落ちしたので直す

    ループを実装してサイドバーがカラム落ちしたので直します。

    変更点、多いです。

    index: wrapper 内に main を移動させる
    sidebar: sidebarクラスな div で全体を囲む
    css: 変更したクラスとともにスタイル修正
    ---
     css/screen.css   | 28 ++++++++++++++++++++--------
     index.php        | 41 +++++++++++++++++++++++------------------
     sass/_768up.sass | 17 ++++++++++++-----
     sass/_main.sass  | 14 +++++++++++---
     sidebar.php      | 13 +++++++++----
     5 files changed, 75 insertions(+), 38 deletions(-)
    
    diff --git a/css/screen.css b/css/screen.css
    index 24538c4..526c403 100644
    --- a/css/screen.css
    +++ b/css/screen.css
    @@ -77,13 +77,13 @@ body {
     }
    
     .footer-container,
    -.main aside {
    +.sidebar aside {
       border-top: 20px solid #e44d26;
     }
    
     .header-container,
     .footer-container,
    -.main aside {
    +.sidebar aside {
       background: #f16529;
     }
    
    @@ -118,13 +118,18 @@ nav a:hover {
     /* ==============
      *  MOBILE: Main
      * ============== */
    -.main {
    +.main-container {
       padding: 30px 0;
     }
    +
     .main article h1 {
       font-size: 2em;
     }
    -.main aside {
    +
    +/* =================
    + *  MOBILE: Sidebar
    + * ================= */
    +.sidebar aside {
       color: white;
       padding: 0 5% 10px;
     }
    @@ -163,7 +168,7 @@ nav a:hover {
        *  WIDE: CSS3 Effects
        * ==================== */
       .header-container,
    -  .main aside {
    +  .sidebar aside {
         -webkit-box-shadow: 0 5px 10px #aaaaaa;
         -moz-box-shadow: 0 5px 10px #aaaaaa;
         box-shadow: 0 5px 10px #aaaaaa;
    @@ -184,13 +189,20 @@ nav a:hover {
       /* ============
        *  WIDE: Main
        * ============ */
    -  .main article {
    +  .main {
         float: left;
         width: 57%;
       }
    -  .main aside {
    +
    +  /* ===============
    +   *  WIDE: Sidebar
    +   * =============== */
    +  .sidebar {
         float: right;
    -    width: 28%;
    +    width: 38%;
    +  }
    +  .sidebar aside {
    +    padding: 0 13% 10px;
       }
     }
     @media only screen and (min-width: 1140px) {
    diff --git a/index.php b/index.php
    index 9efc61d..d20db78 100644
    --- a/index.php
    +++ b/index.php
    @@ -13,37 +13,42 @@
    
     get_header(); ?>
    
    -<div class="main wrapper clearfix">
    +<div class="wrapper clearfix">
    
    -	<?php if ( have_posts() ) : ?>
    -		<?php while ( have_posts() ) : the_post(); ?>
    +	<div class="main clearfix">
    
    -			<article <?php post_class(); ?>>
    -				<header>
    +		<?php if ( have_posts() ) : ?>
    +			<?php while ( have_posts() ) : the_post(); ?>
    
    -					<h1><?php the_title(); ?></h1>
    +				<article <?php post_class(); ?>>
    +					<header>
    
    -					<time><?php the_time( 'Y.n.j' ); ?></time>
    +						<h1><?php the_title(); ?></h1>
    
    -				</header>
    -				<section>
    +						<time><?php the_time( 'Y.n.j' ); ?></time>
    
    -					<?php the_excerpt(); // 記事の抜粋を表示 ?>
    +					</header>
    +					<section>
    
    -				</section>
    -				<footer>
    +						<?php the_excerpt(); // 記事の抜粋を表示 ?>
    
    -					<?php the_category(); ?>
    +					</section>
    +					<footer>
    
    -				</footer>
    -			</article>
    +						<?php the_category(); ?>
    
    -		<?php endwhile; ?>
    -	<?php endif; ?>
    +					</footer>
    +				</article>
    +
    +			<?php endwhile; ?>
    +		<?php endif; ?>
    +
    +	</div>
    +	<!-- #main -->
    
     	<?php get_sidebar(); ?>
    
     </div>
    -<!-- #main -->
    +<!-- #wrapper -->
    
     <?php get_footer(); ?>
    diff --git a/sass/_768up.sass b/sass/_768up.sass
    index 70e9bf6..36f87c5 100644
    --- a/sass/_768up.sass
    +++ b/sass/_768up.sass
    @@ -3,7 +3,7 @@
      * ====================
    
     .header-container,
    -.main aside
    +.sidebar aside
     	@include box-shadow(0 5px 10px #aaa)
    
     /* ============
    @@ -22,9 +22,16 @@ nav
      * ============
    
     .main
    +	float: left
    +	width: 57%
     	article
    -		float: left
    -		width: 57%
    +
    +/* ===============
    + *  WIDE: Sidebar
    + * ===============
    +
    +.sidebar
    +	float: right
    +	width: 38%
     	aside
    -		float: right
    -		width: 28%
    +		padding: 0 13% 10px
    diff --git a/sass/_main.sass b/sass/_main.sass
    index fed9577..d6df2b3 100644
    --- a/sass/_main.sass
    +++ b/sass/_main.sass
    @@ -62,12 +62,12 @@ body
     	border-bottom: 20px solid #e44d26
    
     .footer-container,
    -.main aside
    +.sidebar aside
     	border-top: 20px solid #e44d26
    
     .header-container,
     .footer-container,
    -.main aside
    +.sidebar aside
     	background: #f16529
    
     .title
    @@ -100,10 +100,18 @@ nav
      *  MOBILE: Main
      * ==============
    
    -.main
    +.main-container
     	padding: 30px 0
    +
    +.main
     	article h1
     		font-size: 2em
    +
    +/* =================
    + *  MOBILE: Sidebar
    + * =================
    +
    +.sidebar
     	aside
     		color: white
     		padding: 0 5% 10px
    diff --git a/sidebar.php b/sidebar.php
    index 567535e..23f0573 100644
    --- a/sidebar.php
    +++ b/sidebar.php
    @@ -9,8 +9,13 @@
      */
     ?>
    
    -<aside>
    -	<h3>aside</h3>
    +<div class="sidebar clearfix">
    +
    +	<aside>
    +		<h3>aside</h3>
    +
    +		<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices.</p>
    +	</aside>
    +
    +</div>
    
    -	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices.</p>
    -</aside>

     

    サイドバーウィジェットを使えるように定義する

    サイドバーでウィジェットを使うには、サイドバーの定義をしてあげなくちゃいけません。

    サイドバーの定義は register_sidebar でできます、さっそく functions.php で定義してあげます。

    /**
     * メインのサイドバーを定義
     *
     * @since WordPress 2.2 (2.9.0: description プロパティ追加
     */
    register_sidebar( $args = array(
    		// サイドバーの名前、2つめの引数でテキストドメインを指定
    		'name'          => __( 'メインのサイドバー', 'テーマのテキストドメイン' ),
    		// サイドバー呼び出し用のID。小文字かつスペースは無きよう。
    		'id'            => 'sidebar-main',
    		// サイドバーの説明
    		'description'   => '',
    		// サイドバーウィジェットに付加されるクラス
    		'class'         => '',
    		// ウィジェットの前に配置する HTML
    		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    		// ウィジェットの後に配置する HTML
    		'after_widget'  => '</aside>',
    		// ウィジェットタイトルの前に配置する HTML
    		'before_title'  => '<h3 class="widgettitle">',
    		// ウィジェットタイトルの後に配置する HTML
    		'after_title'   => '</h3>' )
    );

     

    こんな感じで。説明はコメントで入れつつ。テキストドメインってのはちょっと上でも書いた多言語化するためのやつです。

    ひとまずそれはスルー。

    定義したサイドバーを sidebar.php で呼び出す

    サイドバーを定義したのでめでたくウィジェットを使うことができます。

    ということで sidebar.php から呼び出します。

    基本的な形はこんな感じ

    <?php if ( is_active_sidebar( 'sidebar-main' ) ) : // '***' IDのサイドバーがあるとき ?>
    	<?php dynamic_sidebar( 'sidebar-main' ); // '***' のサイドバーを呼び出す?>
    <?php else : ?>
    	<!-- ウィジェットがないときの処理 -->
    <?php endif; ?>

     

    元のソースからの変更はこうなりました。

     <div class="sidebar">
    
    -	<aside>
    -		<h3>aside</h3>
    +	<?php if ( is_active_sidebar( 'sidebar-main' ) ) : ?>
    
    -		<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices.</p>
    -	</aside>
    +		<?php dynamic_sidebar( 'sidebar-main' ); ?>
    
    -</div>
    +	<?php else : ?>
    +
    +		<aside>
    +			<h3>aside</h3>
    +
    +			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sodales urna non odio egestas tempor. Nunc vel vehicula ante. Etiam bibendum iaculis libero, eget molestie nisl pharetra in. In semper consequat est, eu porta velit mollis nec. Curabitur posuere enim eget turpis feugiat tempor. Etiam ullamcorper lorem dapibus velit suscipit ultrices.</p>
    +		</aside>
    
    +	<?php endif; ?>
    +
    +</div>

     

    トップページにアクセスしてみると

    ウィジェット使ってない時
    ウィジェット使ってない時

     

    適当にウィジェットを追加してもう一度見てみます

     

    ウィジェットが無事反映されましたー
    ウィジェットが無事反映されましたー

     

    これでトップページの体裁がギリギリ整いましたかね。

    index.php しかないのでページ遷移しませんけども(´Д`)

    次は第一回目の Theme Check を通して修正入れていきます、ここまでのzipがこちら

    つづきます