通常のカテゴリを投稿とカスタム投稿で使用して互いのリンクを貼りたい
-
いつもお世話になっております。
今回は投稿で使用しているデフォルトのカテゴリをカスタム投稿にも使用しています。
投稿の個別ページに同じカテゴリ(子カテゴリ)のカスタム投稿のアーカイブへのリンクを貼りたいのですが、方法が分かりません。カスタム投稿に同じカテゴリの投稿アーカイブへのリンクは
<?php $cat = get_the_category(); echo '<a href=' . get_category_link( $cat[0]->term_id ) . '>'. $cat[0]->name . '</a>'; ?>
これで表示されました。
この逆で尚且つカスタム投稿を指定すればいいのは分かるのですが、方法が分かりません。つたない文章で申し訳ありませんが、ご教授お願い致します。
-
検証していませんが次のようなコードはどうでしょう。
<?php $cat = get_the_category(); $url = home_url( '/post_type=カスタム投稿タイプのスラッグ&cat=' . $cat[0]->term_id ); echo '<a href="' . $url . '">'. $cat[0]->name . '</a>'; ?>
(すみません、投稿したあと修正しました。)
gblsm様
おはようございます。お返事ありがとうございます。ご提示頂いたコードを試してみたのですが、404となってしまいました。
パーマリンクの設定で影響は出るのでしょうか??gblsm様
?を入れてカスタム投稿へのアーカイブが表示されました!!
ありがとうございました。アーカイブではなくて個別ページへのリンクをはるのはできるのでしょうか??
カスタム投稿からカテゴリは子カテゴリに1つしか指定しない予定なので、アーカイブではなく個別ページにリンクをおけたら一番の理想なのです。続けての質問になってしまい申し訳ありません。
ご教授お願いできますでしょうかm(_ _)m関数 get_posts() を使えば、カテゴリーを指定して投稿(の配列)や、カスタム投稿(の配列)を取得できます。子カテゴリーひとつにカスタムひとつだけでも get_posts() を使えば良いでしょう。すると要素がひとつの配列が取得できるので、そのゼロ番目の要素が目的のカスタム投稿になるはずです。あとは、その要素(カスタム投稿を表す投稿オブジェクト)から投稿IDを取り出して、関数 get_permalink() へ渡せば、カスタム投稿のパーマリンクが得られると思います。
gblsm様
お返事ありがとうございます。
get_posts()を使用して以下のコードであってますでしょうか??<?php $sticky = get_option( 'sticky_posts' ); $staffblog = get_posts( array( 'post_type' => 'staff', 'category' => 'staff-blog', 'post__in' => get_option( 'sticky_posts' ), 'posts_per_page' => 1, )); foreach( $staffblog as $post ): setup_postdata( $post ); ?> <a href="<?php get_permalink() ;?>"><?php the_title(); ?></a> <?php endforeach; wp_reset_postdata(); ?>
何度も申し訳ありませんが、ご教授お願い致します。
natsu85さん
途中からすみません。
これってやりたいことは
「カスタムポスト」を利用して、所属する「ターム又はカテゴリー」へリンクを張りたい
という意味でしょうか。(パンくずのような意味合いですかね??)<?php if(is_object_in_term($post->ID,'category')): ?> <?php the_terms($post->ID,'category'); ?> <?php endif; ?>
又は
$term = array_pop(get_the_terms($post->ID, 'category')); <a href="<?php echo esc_url(get_term_link($term -> slug, $term -> taxonomy)); ?>" title=""><?php echo esc_html($term->name); ?></a>
それとも
「カテゴリー」に「投稿とカスタム投稿」を表示したい
という意味でしょうか
であれば下のコードをよく使います<?php if ( have_posts() ) : $args = array( //トップに表示する投稿タイプ 'post_type' => array( 'post',//投稿 'custompost' ), //トップに表示するステイタス 'post_status' => array( ), ); query_posts( $args ); while ( have_posts() ) : the_post(); ?> 表示したい内容 <?php endwhile; endif ?>
意味が違っていたらすみません。
natsu85さん、私の方で検証してみる時間が取れなくて申し訳ありません。あっているかどうかは、そのコードを実際に動作させて確認なさって大丈夫でしたらそれで大丈夫だと判断なさって良いと思います。思ったように出力されない場合は、どのような結果になったかを示してくださいませんか。
mura0403様
コメントありがとうございました。
申し訳ありません。
今回はデフォルトのカテゴリを投稿とカスタム投稿とで利用し、投稿個別ページには同じ子カテゴリのカスタム投稿の個別ページへのリンクを貼りたいと思っております。
アーカイブへのリンクへはgblsm様から教えて頂いたコードにてできたのですが、同じ子カテゴリのカスタム投稿へのリンクがうまくいっていない状態です。とっても嬉しかったです!!
gblsm様
お返事ありがとうざいます。
ごめんなさい!!
どのような結果になったのかを記載しておりませんでした。上記のコードですと、<?php the_title(); ?>で出力されているのはカスタム投稿のタイトルなのですが、現在表示されている子カテゴリとは違うタイトルが表示されています。
おそらくはカスタム投稿にて設定しているタクソノミーで表示されているような気がします。リンクは現在表示されている投稿のリンクになってしまっている状態です。
get_posts関数のcategory引数にはカテゴリーIDを指定する必要があるそうです。
テンプレートタグ/get posts – WordPress Codex 日本語版追記:post__in引数を指定すると欲しい投稿が除外されてしまいませんか?
gblsm様
お返事ありがとうございます。
category引数はIDでした!!
category_nameに変更しました。
が指定しているのが親カテゴリーなのですが、子カテゴリーは今後も増えていくので、子カテゴリーのID等を指定することができないので、親カテゴリーに含まれる現在表示されている子カテゴリーと同じ子カテゴリーのタイトルとリンクを表示するには、どのようにすればいいのでしょうか??現在は、タイトルは親カテゴリーに含まれている子カテゴリーの一番上のタイトルが表示され、リンクは現在表示されている投稿のリンクになっています。
'posts_per_page' => 1,
を試しに削除してみましたが、post__in引数で指定しても親カテゴリーに含まれているタイトルが全て表示され除外されていませんでした。「単一投稿のページで表示中の投稿」に付けてあるカテゴリーをAとします。このAは、get_the_category関数で取得できますよ。
ただし返されるのは配列です。投稿ひとつにカテゴリーが複数ついていると、get_the_categoryは全部のカテゴリーを返します。例えば親カテゴリーAと子カテゴリーBの二つを付けてあると、配列にA→B、B→Aのどっち順で入るかは決まっていないので、コードを書くのが難しくなります。でも投稿に子カテゴリーだけをつけておけばすっきりとコードが書けると思います。
gblsm様
お返事ありがとうございます。
カテゴリーはラジオボタンに変更し1つしか選択できないように設定しているので、
<?php $category = get_the_category( get_the_ID() ); $cat_id = $category[0]->cat_ID; $sticky = get_option( 'sticky_posts' ); $staffblog = get_posts( array( 'post_type' => 'staff', 'cat' => $cat_id, 'post__in' => get_option( 'sticky_posts' ), 'posts_per_page' => 1, )); foreach( $staffblog as $post ): setup_postdata( $post ); ?> <a href="<?php get_permalink() ;?>"><?php the_title(); ?></a> <?php endforeach; wp_reset_postdata(); ?>
として現在表示されている子カテゴリーの名前が<?php the_title(); ?>で出力されました!!
ただ、リンクがカスタム投稿ではなく現在表示されている投稿のURLになってしまっています。
$staffblogにてカスタム投稿のURLは取得できていますが、<?php get_permalink() ;?>では現在表示されている投稿へのURLになっているのは何故なのでしょうか?
- トピック「通常のカテゴリを投稿とカスタム投稿で使用して互いのリンクを貼りたい」には新たに返信することはできません。