つながるnet

子カテゴリのリストをページ上部に表示

「よくある質問」ページなどで、ページ上部にQリスト(質問リスト)、続いて下部にQA詳細(質問と答え)などにしたい場合に活用。

条件:パーマリンクは%category%/%post_id%のように、ドメインに続くURLがカテゴリスラグ

やっていること:
・URLからカテゴリスラグを取得
・子カテゴリを持っていない投稿の抽出
・子カテゴリがある投稿の抽出

[php]<?php
$bufList = "";
$bufDetail = "";

// 現在のURIの解析
// ドメイン/ルートカテゴリ(or ルート子)/エリア子1/エリア子2
$culUri = $_SERVER["REQUEST_URI"]; // Uri
$culUriArr = split("/",$culUri); // Uriを分解
$culUriArr = array_filter($culUriArr); // 空要素を削除
$culCatSlg = reset($culUriArr); //配列の先頭を取得
$catPInf = get_category_by_slug($culCatSlg);
$catPId = $catPInf -> term_id;
$catPNam = $catPInf -> name;

$bufList .= "<h3 class=’entry-title’>".$catPNam."の一覧</h3>\n<div class=’section’>\n";

//子カテゴリがない場合
if ($children = get_categories(‘child_of=’.$catPId)) {
$exclude = array();
foreach ($children as $child)
$exclude[] = $child->term_id;
query_posts(array(‘cat’=>$catPId, ‘category__not_in’ => $exclude));
}else{
query_posts( ‘cat=’.$catPId.’&post_status=publish’ );
}
if ( have_posts() ) {
$bufList .= "<div class=’section’>\n";
$bufList .= "<ul class=’faq’>\n";
// $bufDetail .= "<h3 class=’entry-title’>".$catPNam."の詳細</h3>\n";
$bufDetail .= "<div class=’section’>\n";
while ( have_posts() ) {
the_post();
$pId = $post->ID;
$pTtl = $post->post_title;
$pCont = $post->post_content;

$bufList .= "<li><a href=’#post-$pId’>$pTtl</a></li>\n";
$bufDetail .= "<h4 class=’entry-title’>$pTtl<a name=’post-$pId’></a></h4>\n";
$bufDetail .= "<div class=’section’>\n";
$bufDetail .= "$pCont\n";
$bufDetail .= "</div>\n";
}
$bufDetail .= "</div>\n";
$bufList .= "</ul>\n<div class=’both’></div>\n";
$bufList .= "</div>\n";
wp_reset_query();
}

//子カテゴリを取得
$catCArr = get_terms( ‘category’,
array(
‘child_of’ => $catPId,
‘orderby’ => ‘id’, //子カテゴリのソート順(省略時はname。count、name、slug、term_group、none、id)
‘fields’ => ‘ids’ ) );

foreach($catCArr as $catCId){
$catCInf = get_category($catCId);
$catCNam = $catCInf->name;

$bufList .= "<h4 class=’entry-title’>$catCNam</h4>\n";
$bufList .= "<div class=’section’>\n";
$bufList .= "<ul class=’faq’>\n";
$bufDetail .= "<h3 class=’entry-title’>$catCNam</h3>\n";
$bufDetail .= "<div class=’section’>\n";
query_posts( ‘cat=’.$catCId.’&post_status=publish’ );
while ( have_posts() ) {
the_post();
$pId = $post->ID;
$pTtl = $post->post_title;
$pCont = $post->post_content;

$bufList .= "<li><a href=’#post-$pId’>$pTtl</a></li>\n";
$bufDetail .= "<h4 class=’entry-title’>$pTtl<a name=’post-$pId’></a></h4>\n";
$bufDetail .= "<div class=’section’>\n";
$bufDetail .= "$pCont\n";
$bufDetail .= "</div>\n";
}
$bufDetail .= "</div>\n";
$bufList .= "</ul>\n<div class=’both’></div>\n";
$bufList .= "</div>\n";
}
$bufList .= "</div>\n";

echo $bufList;
echo $bufDetail;

?>[/php]

直接メールしてみる

お名前 (必須)
メールアドレス (必須)
件名
ご相談内容
画像文字をご入力ください
captcha

コメントを残す