• 解決済 no23h

    (@no23h)


    記事の一覧を生成するループ内に、カテゴリーを識別するための色分けしたspan要素を設置したく、以下のコードを記述しましたが何も表示されません。
    カテゴリーはすでに作成済みで、各スラッグもちゃんと設定してます。
    間違っている箇所、不足しているコードがありましたら教えていただけませんでしょうか。
    よろしくお願いいたします。

    — functions.php —
    function cat_bar() {
    if (in_category(array(‘interview’)) ) :
    echo ‘<span class=”cat_bar_interview”></span>’;
    elseif (in_category(array(‘customer-voice’)) ) :
    echo ‘<span class=”cat_bar_customer_voice”></span>’;
    elseif (in_category(array(‘case’)) ) :
    echo ‘<span class=”cat_bar_case”></span>’;
    elseif (in_category(array(‘new-item’)) ) :
    echo ‘<span class=”cat_bar_new_item”></span>’;
    endif;
    }

    — page-press.php —
    <?php
    $args = array(
    ‘post_type’ => ‘post’,
    ‘paged’ => $paged
    ); ?>
    <?php query_posts( $args ); ?>
    <?php if (have_posts()) : ?>
    <?php query_posts( ‘nopaging=1’ ); ?>
    <?php while (have_posts()) : the_post();
    /* ループ開始 */ ?>
    <div class=”post”>
    “>
    <?php the_post_thumbnail(array(300, 300)); ?>

    <?php cat_bar(); ?>

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

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター Okamoto Hidetaka

    (@hideokamoto)

    — functions.php —

    function cat_bar() {
      var_dump('cat_bar() is working'); // これが表示されるならこの関数は動いている
      var_dump( get_the_category()->slug ); //カテゴリのスラッグを表示
      if (in_category(array('interview')) ) :
        echo '<span class="cat_bar_interview"></span>';
      elseif (in_category(array('customer-voice')) ) :
        echo '<span class="cat_bar_customer_voice"></span>';
      elseif (in_category(array('case')) ) :
        echo '<span class="cat_bar_case"></span>';
      elseif (in_category(array('new-item')) ) :
        echo '<span class="cat_bar_new_item"></span>';
        endif;
    }

    2つ目のvar_dumpで出てきた値がin_categoryで指定している値と一致しているかチェックしてみてください。
    1つ目のvar_dumpの内容も出てきていない様子であればこの関数が実行されていません。

    トピック投稿者 no23h

    (@no23h)

    Okamoto Hidetaka 様
    ご回答いただきありがとうございます。

    教えていただいたコードを試してみたところ、以下の内容が表示されました。
    string(20) “cat_bar() is working”
    Notice: Trying to get property of non-object in/Applications/MAMP/htdocs/サイト名/wp-content/themes/テーマ名/functions.phpon line 124
    NULL

    正常には動いているようですが、NULLと表示されるということはカテゴリーが参照できていないということでしょうか。
    データベースを確認してみたところ、wp_termsにはカテゴリー内容が存在していました。

    検証したところ span 要素が出力されたので、function cat_bar() のコードに変なところはないと思います。

    ところで

    var_dump( get_the_category()->slug );

    $cats = get_the_category(); // カテゴリーオブジェクトの配列
    var_dump( $cats[0]->slug );

    ですね。

    追記:カテゴリーを2つ以上つけてあるなら $cats[1]->slug なども対象に。

    こんにちは、横からすみません。

    page-press.phpは、query_post()2個ひつようないですよね、

    <?php
    $args = array(
    	'post_type'	 => 'post',
    	'nopaging'	 => true,
    );
    ?>
    <?php query_posts( $args ); ?>
    <?php if ( have_posts() ) : ?>
    	<?php //query_posts( 'nopaging=1' ); ?>
    	<?php
    	while ( have_posts() ) : the_post();
    		/* ループ開始 */
    		?>
    		<div <?php post_class(); ?>>
    			<span class="category-marker"></span><?php the_title( '<h2>', '</h2>' ); ?>
    
    			<?php the_post_thumbnail( array( 300, 300 ) ); ?>
    
    			<?php //cat_bar();  ?>
    	<?php endwhile; ?>
    	<?php wp_reset_query(); ?>
    <?php endif; ?>

    cat_bar()も削って、代わりに 
    <span class="category-marker"></span>と、
    <div class="post">の代わりに<div <?php post_class(); ?>>に置き換えて、

    スタイルシートに、以下のようにスタイルをセットすれば、難しい事をしなくて済むんじゃないですか?

    .category-marker{
        display:inline-block;
        width:100px;
        height:1em;
        border:1px solid #ccc;
    }
    .category-hello .category-marker{
        background:#2ecc71;
    }
    .category-aciform .category-marker{
        background:#e74c3c;
    }

    もし、カテゴリーが複数で込み入っているなら、条件分岐をpost_class()のフィルタかなんかで追加するといいのではないかと思います。

    category-hello なんかのクラスは、日本語だと、category-idに置き換えられたような気がしますが、その辺りは よしなに、

    トピック投稿者 no23h

    (@no23h)

    無事解決に至りました。
    ご回答ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「ループ内にカテゴリーごとに異なるエレメントを挿入したい」には新たに返信することはできません。