( モデレーター向けメモ: 当初の名称:"カスタム投稿タイプの問題?")
私はサイドバーを除いてすべてがうまく機能しているカスタム投稿タイプでいくつかの問題を抱えています。
これが私のsidebar.php
のコードです。
<?php
if (is_home()) {
dynamic_sidebar('frontpage-sidebar');
}
if (is_single()) {
dynamic_sidebar('single-post-sidebar');
}
....
?>
'frontpage-sidebar'
が代わりに読み込まれるので、'single-post-sidebar'
が読み込まれていないことを確認するために単一のページを開いたときを除いて、これは通常うまくいきます。問題はどこだ?
これが私のカスタム投稿タイプのコードです。
$labels = array(
'name' => _x('Tools', 'post type general name'),
'singular_name' => _x('Tool', 'post type singular name'),
'add_new' => _x('Add New', 'Tool'),
'add_new_item' => __('Add New Tool'),
'edit_item' => __('Edit Tool'),
'new_item' => __('New Tool'),
'view_item' => __('View Tool'),
'search_items' => __('Search Tools'),
'not_found' => __('No Tools found'),
'not_found_in_trash' => __('No Tools found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => 2,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments','page-attributes') // 'not sure that post can have page-attributes ????'
);
register_post_type('tools', $args);
通常の投稿の代わりにカスタム投稿タイプを使用しているときに、さまざまなページにさまざまなサイドバーを読み込む方法を教えてください。
ありがとう。
あなたの質問を正しく理解しているなら、URLを表示しているときにis_home()
がfalse
である理由を尋ねています/tools/example-tool/
?あなたの質問を理解すると、答えは単純に、is_home()はtrue
カスタム投稿タイプではないということです。
実際には、is_home()
はtrue
であってはなりません。ただし、1。)投稿のホームページリストにあるとき、または2.) "static page"が「投稿ページ」、管理者のSettings> Readingセクション(私のスクリーンショットでは、「投稿ページ」が「ページ」に設定-post_type=='page'
-タイトルが「ホーム」):
(ソース: mikeschinkel.com )
したがって、サイドバーを表示する場合は、is_home()
とは異なる基準を使用する必要があると思います。このコードを達成しようとしていたことを言葉で説明できますか?
以下のコメントと 後の研究 に基づいて、問題がよく理解された後適切なis_home()
およびis_single()
の値は、カスタム投稿タイプに対して実際に定義されることはありませんでした。したがって、問題に対するより良い解決策の1つは、投稿タイプ固有のテーマテンプレートページ、つまり投稿タイプがtools
の場合はsingle-tools.php
を作成し、その投稿タイプ専用のサイドバーを定義することです。 しかし、すべてを1つのsingle.php
経由でルーティングする必要がある場合は、is_home()
とis_single()
の代わりに使用して期待どおりの結果を得ることができる関数を次に示します。結果をテーマのfunctions.php
ファイル(またはプラグインのファイルの1つ)に保存できます:
function is_only_home() {
$post_type = get_query_var('post_type');
return is_home() && empty($post_type);
}
function is_any_single() {
$post_type = get_query_var('post_type');
return is_single() || !empty($post_type);
}
上記の最初のコード例を取り上げ、これらの関数を適用すると、次のようになります。
<?php
if (is_only_home()) {
dynamic_sidebar('frontpage-sidebar');
}
if (is_any_single()) {
dynamic_sidebar('single-post-sidebar');
}
....
?>
使用したい関数: is_singular($post_types)
ここで$post_types
は文字列/カスタム投稿タイプの配列です。単数ページが表示されている場合、この関数はtrueを返します。