カスタム投稿について

◎カスタム投稿について

◎カスタム投稿とは?
カスタム投稿は乱暴にまとめれば「初めからカテゴリーが設定された投稿」の事。
通常WordPressでの記事投稿はブログと同じく、記事毎に「カテゴリー」の指定が必要。
これは慣れた人間でも忘れがちな手間。
しかしカスタム投稿ではこの「いちいちカテゴリーを指定」の手間が消失する。

◎カスタム投稿の欠点
●一般的なテンプレートが使えない
独自に出力用の記述が必要→ある程度のPHPorテンプレートカスタマイズの知識必要

●各種プラグインに非対応
確認した限りで以下が動作せず。管理画面カスタマイズ系が厳しい。
 ◆Admin Post Navigation(前後の記事に移動するリンク表示)
 ◆WPLite(サイドバーの項目を任意で非表示に)
 ◆Metabox editor(表示する必要の無いカスタムフィールドなどを任意で非表示に)
 ◆Lightbox 2(比較的定番、自動で画像をライトボックス風に表示)

カスタム投稿関連サイト
●私がカスタム投稿タイプを使うべき理由 | Odysseygate.com
http://www.odysseygate.com/archives/1628
実装ノウハウと言うよりエッセイ的な記述、しかしここに書かれているクライアントとのやりとりは非常に重要。
慣れた人間にとっては整然とした画面でも、慣れない人にはカオスな迷路。
カスタム投稿は余計な情報・操作を遮断出来るため、インターフェースの向上に繋がる可能性あり。

●カスタム投稿タイプ(Custom Post Type)の導入と使い方 [WordPress 3.0] | Odysseygate.com
http://www.odysseygate.com/archives/1624
使い易いプラグインを利用した具体的な記述、初心者にも判り易い。

●Wordpressのカスタム投稿タイプで作るよくある質問(Q&A)ページ | webOpixel
http://www.webopixel.net/wordp……s/186.html
もっともカスタム投稿向きかつ汎用性の高い「よくある質問」を作るための具体的手順。
そのままコピーして使えるサンプルコードも。
後半はタクソノミー(カスタム分類)についての記述なので注意。

●WordPress 3.0のカスタム投稿タイプ機能(その1) – The blog of H.Fujimoto
http://www.h-fj.com/blog/archi……125752.php

●WordPress 3.0のカスタム投稿タイプ機能(その2) – The blog of H.Fujimoto
http://www.h-fj.com/blog/archi……172024.php

詳細かつ具体的でロジカルな解説。
ただし、ある程度PHP・プログラミングの知識が必要。

サンプルコード
◎プラグインを使わずカスタム投稿を使用する場合
関連サイトにも記述がある様に、プラグインを利用した方が容易。
ただし、カスタム投稿設定をインポート・エキスポートする事が難しい。
テーマファイルに含めればテーマファイルを適応するだけでカスタム投稿が有効となる。

※ニッチなニーズを想定
 ●カスタム投稿タイプが複数
 ●操作に慣れないクライアントを想定、投稿画面は最小限
 ●出力形式は「よくある質問」の様に、投稿全文を一覧表示のみ
 ●アーカイブ表示は用意しない
 ●各項目が検索でヒットした場合、各項目では無く「よくある質問」一覧にジャンプ

◎function.phpへの記述
●カスタム投稿登録
長く見えるが、通常カスタマイズすべきは$custum_posts_listの中身のみ。
ここで投稿タイプの名前を設定。

<?php //カスタム投稿用、label→メニューに表示される名称、name→処理用の名称(英数字のみOK)
$custum_posts_list = array(
													 array('label' => 'メンバー一覧', 'name' => 'member'),
													 array('label' => 'よくある質問', 'name' => 'FAQ'),
													 );
//全カスタム投稿設定を繰り返し処理
foreach($custum_posts_list as $custum_posts){
	$custum_post = $custum_posts["name"];
	$label = $custum_posts["label"];
	$item_jpname = $custum_posts["item_jpname"];
	//カスタム投稿用パラメーターを設定
	//他にも検索・ナビゲーションから除外、メニューにオリジナルアイコン、特定権限者のみ編集なども可能(今回省略)
	//supports→メタボックス制御、他に,'author','thumbnail', 'excerpt','comments','custom-fields'等も可能
	$args = array(
								'label' => $label,
								'labels' => array(
																	'singular_name' => $label,
																	'add_new_item' => '新しく'.$label.'に項目を追加',
																	'add_new' => '新しく'.$label.'に項目を追加',
																	'new_item' => '新規'.$label,
																	'view_item' => $label.'を表示',
																	'not_found' => $label.'の項目は見つかりませんでした',
																	'not_found_in_trash' => 'ゴミ箱に'.$label.'はありません。',
																	'search_items' => $label.'を検索',
																	),
								'public' => true,
								'show_ui' => true,
								'query_var' => true,
								'capability_type' => 'post',
								'hierarchical' => false,/*親子関係*/
								'supports' => array('title','editor')/*メタボックス制御*/
								);
	//カスタム投稿を登録
	register_post_type($custum_post, $args);
}
?>

●カスタム投稿を検索範囲に含める場合

//検索対象限定、対象に加えたいカスタム投稿も追加
//記事=post、ページ=page、カスタム投稿はnameで登録
function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('type','post,member,FAQ');//ページは含めない場合
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');

●カスタム投稿を検索範囲に含めない場合

<?php //検索対象限定
//記事=post、ページ=page、カスタム投稿はnameで登録
function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('type','post');//投稿記事のみ
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');?>

出力サンプルコード
●カスタム投稿出力サンプル
※かなり強引な記述、挿入されるタグの識別し易さを優先
出来れば他のカスタム投稿サイトを参考に自作を

タグ部分を変更してカスタマイズ可能、ショートコード等も通常通り処理して出力。
PHP以外の部分は改行等もそのまま出力。

<?php //カスタム投稿put、タイトルと本文を整形
function put_CP($custum_post) {
	$post_type_object = get_post_type_object($custum_post);
	if(!$post_type_object){return "";}//カスタム投稿の有無チェク、存在しなければ終了
	$myQuery = new WP_Query(); // WP_Queryオブジェクト生成
	$param = array( //パラメータ。
		'posts_per_page' => '-1', //(整数)- 1ページに表示する記事数。-1 ならすべての投稿を取得。
		'post_type' => $custum_post, //カスタム投稿タイプのname
		'post_status' => 'publish', //取得するステータスを指定:publish(公開済み)
		'orderby' => 'ID',
		'order' => 'ASC' //昇順
	);
	$myQuery->query($param);  // クエリにパラメータを渡す
	?><div class="<?php echo $custum_post; //カスタム投稿リストの前に挿入するタグ ?>" >
<?php //<div><h3>タイトル</h3>本文</div>形式で出力
	if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post();
	?><div><h3><?php the_title() ;?></h3><?php the_content();?></div>
<?php
	endwhile; endif;?></div>
<?php
}
?>

●例:FAQを出力したい
テンプレートファイル内の任意の場所に以下を記述。

<php put_CP('FAQ') ;?>

●例:FAQを出力した場合のソースコード

<div class="FAQ" >
<div><h3>質問1</h3><p>質問1の答え</p>
</div>
<div><h3>質問2</h3><p>質問2の答え</p>
</div>
</div>

●実際の出力例

質問1

質問1の答え

質問2

質問2の答え

Related posts

タグ: ,

コメントは受け付けていません。