WordPressに関する情報や技術紹介です

Funktion, die die ID der Unterkategorien Zugehörigkeit zur übergeordneten Kategorie ruft

Zuvor zwei Artikel in einer einzigen Ansicht von jeder Unterkategorie schrieb und dann versuchen, einen Artikel abrufen genannt, weil sie für ein wenig mehr in der Nachfrage Smart (und es scheint) ist.

Zu sagen, dass ich nur geändert wurde, um "direkt in der Datenbank zu bekommen" aus dem "regulären Ausdruck verdächtig."

WordPress Funktion, die die ID der Unterkategorien ruft

Sie können jederzeit nutzen, wenn Sie in die folgenden Funktionen setzen: pro functions.php.

// サブカテゴリIDを取得する関数
function get_subcat_id( $cat_id = null ) {
	global $wpdb;

	if($cat_id == null) return false;

	// サブカテゴリを取得
	$sub_cat = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM $wpdb->term_taxonomy WHERE parent=%d", $cat_id));
	return $sub_cat;
}
WordPress サブカテゴリのIDを取得する関数

取得できるのは直下のサブカテゴリのみです。
使用方法としては、以下のように使えます。

<?php
// サブカテゴリのIDを取得(親カテゴリのIDを5とする)
$sub_cat = get_subcat_id(5);

// サブカテゴリが存在するか
if($sub_cat) {

// ループして処理
foreach($sub_cat as $id) :
?>

<h3><a href="<?php echo get_category_link($id); ?>"><?php echo get_cat_name($id); ?></a></h3>
<ul>
<?php if (have_posts()) : query_posts("posts_per_page=5&cat=$id&orderby=ID&order=desc");  ?>
<?php while (have_posts()) : the_post(); ?>
	<li><?php the_time('y-m-d'); ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; wp_reset_query(); ?>
</ul>

<?php
endforeach;

} else {
	echo '<p>サブカテゴリは存在しません。</p>';
}
?>
WordPress サブカテゴリのIDを取得する関数

間違いがあればご指摘下さい。

タグ
, ,
トラックバックURL
  • matsu さん:
    2012/1/24 火曜日 21:15:48

    コチラの記事、大変参考になりました。
    WordPress初心者なんですが、やりたいこととほぼ同様の答えがこちらでした。

    1点質問なのですが、こちらをそのまま使うと、記事の登録されていないサブカテゴリ(部分)も表示されてしまいます。
    この問題を解決する方法を教えて頂けないでしょうか。

    お忙しいところ恐れ入りますが、
    何卒よろしくお願いいたします。

  • ISプランニング さん:
    2012/1/25 水曜日 08:44:05

    >matsuさん
    参考になり何よりです。

    > 1点質問なのですが、こちらをそのまま使うと、記事の登録されていないサブカテゴリ(部分)も表示されてしまいます。
    > この問題を解決する方法を教えて頂けないでしょうか。

    サブカテゴリーのIDを取得する時に調べるSQLもあると思いますが、簡単なのは以下のやり方だと思います。

    1.12,13行目の<h3>と<ul>タグを15行目の下に入れる。

    2.18行目の</ul>タグを17行目の前に入れる。

    have_posts()は「記事がある場合」ですから、記事が無い場合は出力しないはずです、多分。試していないのですが、恐らく問題ないはずです。

    以上、参考までに。(^^)

  • matsu さん:
    2012/1/25 水曜日 12:24:25

    ISプランニングさま
    ご回答誠にありがとうございます!

    実はその形は試していました。
    確かにそうすると、記事0件のは表示されなくなるのですが、
    そうすると各エントリーに対してとが出力されてしまうという別の問題が・・・。

    やりたいのがエントリーの一覧に対してサブカテゴリーが1つの形なので
    もし何かうまくいく方法があればご教授お願い申し上げますm( _ _ )m

  • matsu さん:
    2012/1/25 水曜日 12:41:36

    ISプランニングさま
    すいません、文字が抜けてしまっておりました。

    そうすると各エントリーに対してとが出力されてしまうという別の問題が・・・。

    と書くつもりでした。

  • ISプランニング さん:
    2012/1/25 水曜日 12:52:35

    >matsuさん
    多分タグを書こうとしているのでは?
    タグは消されるので「&lt;」と「&gt;」(どちらも半角で)を使ってください。

  • matsu さん:
    2012/1/25 水曜日 13:04:12

    すいません!

    そうすると各エントリーに対して<h3>と<ul>が出力されてしまうという別の問題が・・・。

    です!

  • ISプランニング さん:
    2012/1/25 水曜日 13:04:34

    >matsuさん
    あぁ意味が分かりました。(^_^;)
    確かにこれはダメですね。すいません。

    では、14行目と15行目の間に、

    <?php if (have_posts()) : ?>

    を入れて、17行目を

    <?php endwhile; endif; endif; wp_reset_query(); ?>

    と変えたらどうでしょうか?
    (というか14行目の「if (have_posts()) :」は不要の予感…)

  • ISプランニング さん:
    2012/1/25 水曜日 13:15:01

    ごめんなさい、もう少しちゃんと書きます。

    foreach($sub_cat as $id) : 以降からです。

    <?php query_posts(省略); ?>
    <?php if(have_posts()) : ?>
    <h3>省略</h3>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
    <li>省略</li>
    <?php endwhile; ?>
    </ul>
    <?php endif; wp_reset_query(); ?>

    どうでしょうか?

  • matsu さん:
    2012/1/25 水曜日 13:34:06

    ISプランニング様

    ありがとうございます!!!
    完璧にできました!!!
    本当にありがとうございました!!!

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ページTOPに戻る