現在の投稿のカテゴリIDを取得するのに問題があります。現在の投稿のカテゴリを見つけるために<?php get_the_category( $id ) ?>
を使用しています。 「demo」のような投稿にcat1とcat2のような2つのカテゴリがあるとします。 cat1ページを開いてデモページに移動すると、別のレイアウトが必要になります。cat2ページを開いてデモページに移動すると、このデモページを他のレイアウトで開きます。それは私が確認するときにのみ行うことができます..どの投稿から呼び出されました..しかしどのように?
WordPressには wp_get_referer
という関数があり、http-headerから参照元のURLを取得します。そのため、カテゴリアーカイブから単一の投稿に移動した場合、そのカテゴリの名前が通常そのURLに含まれます。これはsingle.php
を次のようにして起動できることを意味します。
$refer = wp_get_referer();
if (strpos($refer, 'category/cat1') != false) {... do something ...}
elseif (strpos($refer, 'category/cat2') != false) {... do something else ...}
else {... do a default thing ...}
あなたの設定次第でこの解決策はいくらかの微調整を必要とするかもしれません、しかし一般的な考えは明白です、私は望みます。
<?php $categories = get_the_category( $post->ID ); ?>
これはカテゴリの配列を返します。これを使ってIDを取得できます。
$categories[0]-> term_id;
複数ある場合、これは配列の最初のカテゴリになります。
使用法に関する情報は codex にあります。
あなたのsingle.phpでは、例えば
if(has_category('layout-1')) {
// do layout-1-category stuff here
} elseif (has_category('layout-2')) {
// layout-2 stuff here
} else {
// stuff for all the other styles/regular stuff
}
さらに良いことには、 get_template_part を使用するので、single.phpにあらゆる種類の愚かなコードをあふれさせることはありません。
まずカテゴリIDを取得します。
$cat_id = get_queried_object_id();
次にカテゴリ名を取得します。
$cat_name = get_cat_name($cat_id)
それからあなたは何をすべきかカテゴリー名に応じて決めることができます:
if ($cat_name == 'Cat 1') {
// ... url = layout-1
} elseif ($cat_name == 'Cat 2') {
// ... url = layout-2
}
Gaffenが述べたように、「どのカテゴリから来たのかに応じて投稿のレイアウトを変更する」
テーマのカテゴリテンプレートページ(category.phpなど)の最初に
カテゴリIDを取得し、それをWordPress Transientオプションに保存します。
global $wp_query;
//get category id (or name, slug) and store to the transient api
$categoryId = $wp_query->queried_object->cat_ID;
set_transient( 'category_id_visited', $categoryId, 1 * HOUR_IN_SECONDS );
single.phpまたは単一の投稿表示テンプレートページになりました。
トランジェントから値を取得し、それに従って表示を変更する
if ( false === ( $category_id_visited = get_transient( 'category_id_visited' ) ) ) {
// this code runs when there is no valid transient set
//do nothing for now
} else {
echo 'You came by visiting category: ' . $category_id_visited;
//delete transient if required, otherwise it will be expired automatically
delete_transient( 'category_id_visited' );
}
それが役に立てば幸い。