サポート » マルチサイト » マルチサイトの複数ブログ記事をタームスラッグを指定して一覧表示

  • こんにちは。
    タームのスラッグを指定して記事一覧を表示する方法で困っております。
    マルチサイト内の複数ブログ記事を、$wpdbを使ってターム別に時系列で表示しています。
    ■ 結果サンプル

    ・タームA
     ・2018/10/1 タイトル(ブログID:2)
     ・2018/9/30 タイトル(ブログID:1)
     ・2018/9/29 タイトル(ブログID:2)
    ・タームB
     ・2018/10/2 タイトル(ブログID:1)
     ・2018/9/28 タイトル(ブログID:2)
     ・2018/9/27 タイトル(ブログID:1)

    上記の様に表示する為のコードはこちらですが、これは「term_relationships」の「term_taxonomy_id」を指定して表示しているので、マルチサイトすべてのタームのIDが同じでなければうまく出力できません。
    今後、ブログ1とブログ2のタームIDが異なってしまっても、スラッグの文字が同じなら表示できる様にするにはどの様に変更すればよいでしょうか。

    ■ 複数ブログのターム別一覧

    <?php
    	foreach ( $terms as $term ){
    	$term_id = $term->term_id;
    $sql = '';
    $blog_id_arr = array(1,2);
    $tmp = $blog_id_arr;
    foreach($blog_id_arr as $b_id){
     next($tmp);
     switch_to_blog($b_id);
     $sql .= <<<HERE
    (SELECT *, $b_id as blog_id
    FROM $wpdb->posts pm1 INNER JOIN $wpdb->term_relationships pm2 ON (pm1.ID =  pm2.object_id)
    WHERE post_type = 'post'
    AND post_status = 'publish'
    AND term_taxonomy_id = $term_id )
    HERE;
     if(current($tmp) !== false){
     $sql .= "UNION\n";
     }
     restore_current_blog();
    }
    $sql .= <<<HERE
    ORDER BY post_date DESC
    LIMIT 5
    HERE;
    $posts = $wpdb->get_results($sql);
    ?>
    <ul class="TabPanel">
    <?php
    foreach ($posts as $post):
     switch_to_blog($post->blog_id);
     setup_postdata($post);
    ?>
    <li class="blog<?php echo $blog_id = get_current_blog_id(); ?> post<?php echo $blog_id = get_current_blog_id(); ?>-<?php the_ID(); ?>">
    <time><?php echo the_time('Y.m.d'); ?></time>
    <?php if ($terms = get_the_terms($post->ID,'species')) {
    	foreach ( $terms as $term ) {echo ('<span class="tag_spe '.$term->slug.'">'.$term->name.'</span>');}} ?>
    <?php if ($terms = get_the_terms($post->ID,'field')) {
    	foreach ( $terms as $term ){
    	if ( $term === end($terms)) { ?><span class="<?php echo $term->slug; ?>"><?php echo $term->name; ?></span><?php }
    	else{ ?><span class="<?php echo $term->slug; ?>"><?php echo $term->name."、";} ?></span><?php } } ?>
    	<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php wp_reset_postdata();?>
    <?php restore_current_blog();?>
    <?php endforeach;?></ul>
    <?php } ?>

    どうぞ宜しくお願い致します。

    • このトピックは Chiharu Ebisugawaが3 週間、 5 日前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    get_term_by() はどうでしょうか。
    スラッグを指定してタームの情報を取得することができます。
    https://wpdocs.osdn.jp/関数リファレンス/get_term_by

    例: switch_to_blog() の後辺りに、

    $term_id = ( ( $blog_term = get_term_by( 'slug', $term->slug, 'category' ) ) !== false ) ? $blog_term->term_id : 0;

    • この返信は3 週間、 5 日前に  ishitaka さんが編集しました。

    ishitakaさん、ありがとうございます!
    例として書いて頂いた内容をswitch_to_blog() の次の行に書いて、
    ‘category’の部分をカスタム分類の名前に変更することで希望通りslugで取得できました。

    長い時間悩んでいたので大変助かりました!
    本当にありがとうございます!!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。