0

Wordpress のテンプレート構造と投稿のクエリについて質問があります。

(たとえば) archive-$posttype.php が次のように構築されているテンプレートをセットアップしています。

get_header();

$args = 'page_id=18'; //Client Uses page
query_posts($args); the_post();

get_template_part( 'sub-header' ); 

// Reset Query
wp_reset_query();
?>
<div class="content">
   <?php get_template_part( 'loop' ); ?>...

そのページからコンテンツを出力する sub-header.php ファイルのデフォルトの $post 変数を設定するためにこれを行います。

<div id="subheader">
   <h1><?php echo get_post_meta($post->ID, 'header_title', true)?></h1>
   <?php echo get_post_meta($post->ID, 'header_description', true)?>...

ただし、home.php テンプレートでこのメソッドを使用しても機能しません。

get_header();

$temp_query = $wp_query;

$page_id = 119; //Client Uses page
#$post = get_page( $page_id );
$args = array('page_id' => $page_id);
$post = new WP_Query( $args ); the_post();

get_template_part( 'sub-header' ); 

wp_reset_postdata();
?>
<div class="content">           
   <?php get_template_part( 'loop' ); ?>
   <?php get_sidebar( 'news' ); ?>
</div><!--.content -->
<?php get_footer(); ?>

これがホーム テンプレートではなく 1 つのテンプレートで機能する理由に興味があります。そして、私はこれを間違った方法で行っていますか? ほとんどの場合、ユーザーが現在いる現在のページに実際に関連するサブヘッダー テンプレートにページ コンテンツを含める正しい方法は何ですか。

ありがとう!

4

3 に答える 3

0

「ほとんどの場合、ユーザーがいる現在のページに実際に関連するサブヘッダー テンプレートにページ コンテンツを含める正しい方法は何ですか。」

無関係な 2 つのページ/投稿を結び付けようとするよりも、カスタム フィールド ツールを使用する方が簡単な場合があります。私の現在のお気に入りはAdvanced Custom Fieldsです。

ACF を使用すると、補足フィールド (画像、wysiwyg、ファイル アップロード、合計 14 のフィールド タイプ) を投稿やページに追加して、カスタム データをテンプレートに簡単に取り込むことができます。非常によく文書化されており、非常に使いやすいです。

于 2012-06-26T13:00:19.953 に答える
0

あなたの問題を正確に理解しているかどうかはわかりませんが、私が思うことをしている場合、特定のページからのテキストのチャンクを別のループの上に置いて、何らかの投稿を取り込む場合、テンプレートの命名構造を使用します。

<?php /* Template Name: My Template */ ?>

これにより、標準ループを使用して、クライアントがテンプレートを設定したページからコンテンツを取得できます (使用している静的 ID を回避します)。

ホームページのバグは、閲覧設定で投稿ページとして設定されていないことが原因である可能性があります。私が理解しているように、ページが投稿ページとして設定されていない場合、クエリを具体的に書き直さない限り、通常のページのように動作します。

于 2012-06-26T12:52:49.907 に答える
0

So, I changed the way my sub-header.php template works. Basically some basic checking on what type of page/post was being set/called then dynamically pulled the relevant page info.

<?php 
if (is_page()) : 
    $header_title = get_post_meta($post->ID, 'header_title', true);
    $video_id = get_post_meta($post->ID, 'youtube_video_id', true);
    $thumbnail = get_the_post_thumbnail($post->ID, 'post-thumbnail', array('class'=>'visual-element'));
    $description = get_post_meta($post->ID, 'header_description', true);
elseif (is_home()) :
    $page_id = 119; // News page
    $page = get_page( $page_id );

    $header_title = get_post_meta($page->ID, 'header_title', true);
    $video_id = get_post_meta($page->ID, 'youtube_video_id', true);
    $thumbnail = get_the_post_thumbnail($page->ID, 'post-thumbnail', array('class'=>'visual-element'));
    $description = get_post_meta($page->ID, 'header_description', true);
elseif (is_archive()) :
    $page_id = 18; // Client Uses page
    $page = get_page( $page_id );

    $header_title = get_post_meta($page->ID, 'header_title', true);
    $video_id = get_post_meta($page->ID, 'youtube_video_id', true);
    $thumbnail = get_the_post_thumbnail($page->ID, 'post-thumbnail', array('class'=>'visual-element'));
    $description = get_post_meta($page->ID, 'header_description', true);
endif;
?>
<div id="subheader">    
    <h1><?php echo $header_title; ?></h1>
    <?php if ( $video_id ) : ?>
    <iframe class="visual-element" width="300" height="200" src="http://www.youtube.com/embed/<?php echo $video_id;?>?rel=0" frameborder="0" allowfullscreen></iframe>
    <?php elseif ($thumbnail) : ?>
    <?php echo $thumbnail; ?>
    <?php endif; ?>
    <?php echo $description; ?>
</div><!-- #subheader -->
于 2012-06-26T14:36:28.433 に答える