サポート » 使い方全般 » ショートコード内にてカテゴリースラッグ名の取得が出来ません

  • 解決済 jewin0622

    (@jewin0622)


    お世話になります。
    php,wordpress初めて数日、html,cssは前から出来ている者です。

    数日にかけて調べているのですが、どうしても分からずご教授下さい。
    固定ページにて投稿記事の新着情報を表示したく、functions.phpにて以下のショートコードを書いています。

    //指定記事数の記事リストを表示(Homeで使用)
    function getCatItems($atts, $content = null) {
    extract(shortcode_atts(array(
    “num” => ‘5’
    ), $atts));
    global $post;
    $separator = ‘ ‘;

    $idObj = get_category_by_slug( ‘category-slug ‘);
    $id = $idObj->term_id;

    $oldpost = $post;
    $myposts = get_posts(‘numberposts=’.$num.’&order=DESC&orderby=post_date’);
    $retHtml='<dl>’;
    foreach($myposts as $post) :
    setup_postdata($post);
    $retHtml.='<dt>’.get_post_time(‘Y/m/d’).'</dt>’;
    $retHtml.='<dd><span class=” “> ‘.get_the_category_list( $separator ).’ </span>‘.the_title(“”,””,false).’</dd>’;
    endforeach;
    $retHtml.='</dl>’;
    $post = $oldpost;
    return $retHtml;
    }
    add_shortcode(“recent”, “getCatItems”);

    問題は以下の部分でして、spanのclass名に、対象カテゴリーのスラッグ名を入力したいと考えています。
    $retHtml.='<dd><span class=” “> ‘.get_the_category_list( $separator ).’ </span>‘.the_title(“”,””,false).’</dd>’;
    <?php~の記述などはあったのですが、ショートコード内にてカテゴリースラッグ名だけの取得はどうにも出来ませんでした。

    もしかしたら初歩的な事かもしれず大変恐縮ですが、ご教授下さいます様お願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • これでどうでしょう。

    foreach ( $myposts as $p1 ):
        // 投稿のカテゴリースラッグを並べた文字列を作る
        $cats = get_the_category( $p1 );
        $slugs = array();
        foreach( $cats as $c1 ) {
            $slugs[] = $c1->slug;
        }
        $className = implode( ' ', $slugs );
        $retHtml .= '<dt>' . get_post_time( 'Y/m/d', false, $p1 ) . '</dt>';
        $retHtml .= '<dd><span class="' . $className . '">';
        $retHtml .= get_the_category_list( $separator, '', $p1 );
        $retHtml .= '</span>' . get_the_title( $p1 ) . '</dd>';
    endforeach;

    gblsm様

    ありがとうございます、無事に解決致しました。
    作って頂いた物を見て、自分の力量では出来ないようだったので大変助かりました。
    こちらを拝見して勉強しようと思いますが、変数の勉強をしたらよいのでしょうか?

    大変助かりました、ありがとうございます。

    こういう順に読み進めていくとよいかもしれません。私も調べながら慣れるようにしています。

    1. カテゴリーのスラッグはいきなり取得するのが難しいので、カテゴリーのオブジェクトを取得してから、そのオブジェクトのメンバーに含まれているスラッグを取り出す。PHPのオブジェクトとメンバーの使い方を調べます。
    2. 投稿についているカテゴリー(のオブジェクト)を取得できればよいので、その関数の使い方を調べます。get_the_category関数です。
    3. 投稿に二つ以上カテゴリーがある場合に備えて、get_the_category関数は(カテゴリーひとつではなく)配列を返します。なので、配列の要素(オブジェクト)からスラッグを取り出した後、ひとつの文字列にまとめます。PHPのimplode関数を調べます。

    PCが故障しておりまして大変遅くなりまして申し訳ございません。
    ご丁寧な対応ありがとうございます、お蔭様で少し勉強出来そうな気がしています。
    もしまた何かあればお力添え頂けますと幸いです。

    ありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ショートコード内にてカテゴリースラッグ名の取得が出来ません」には新たに返信することはできません。