2012-06-26 2 views
0

У меня возник вопрос о структуре шаблонов Wordpress и запросах.Загрузка содержимого страницы и содержимого индекса блога (WordPress)

У меня есть мои настройки шаблонов, где (например) архив- $ 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'); ?>... 

Я это установить мой по умолчанию $ сообщения переменному для моего файла суб-header.php которая выводит содержимое с этой страницы:

<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(); ?> 

Мне любопытно, почему это работает на одном шаблоне, а не на домашнем шаблоне. И, я иду об этом неправильно? Каков правильный способ содержания страниц в шаблоне подзаголовка, который в большинстве случаев ВЗАИМНО относится к этой текущей странице, на которой пользователь включен.

Спасибо!

+0

я должен уточнить, что мой шаблон суб-header.php, отлично работает без переписывания WP_Query для всех страниц, за исключением нескольких индивидуальных ситуаций, как архив страницы таможенный пост типа, а индекс страницы блога (который не является главной страницей). – TylerNZ

ответ

0

Не уверен, что я точно понимаю вашу проблему, но если вы делаете то, что я думаю, имея кусок текста с определенной страницы над другим циклом, который тянет в сообщениях того или иного типа, я бы использовал структуру именования шаблонов.

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

Это позволит вам использовать стандартный цикл, чтобы получить содержание от любой страницы клиентов задают шаблон для (избегая статические идентификаторы, которые вы используете).

Ошибка вашей домашней страницы может быть вызвана тем, что она не задана в качестве страницы сообщений в настройках чтения. Насколько я понимаю, если страница не задана в качестве страницы сообщений, она будет действовать как обычная страница, если вы не перепишете запрос конкретно.

0

«Каков правильный способ содержания страниц в шаблоне подзаголовка, который в большинстве случаев ОСНОВНО связан с текущей страницей, на которой пользователь включен».

Вместо того, чтобы пытаться связать две несвязанные страницы/сообщения, может быть проще использовать настраиваемый инструмент поля. Мой текущий фаворит Advanced Custom Fields.

С помощью ACF вы можете добавлять дополнительные поля (изображения, wysiwyg, файлы, 14 типов полей) к своим сообщениям и страницам, а затем легко извлекать пользовательские данные в свой шаблон. Он очень хорошо документирован и чрезвычайно прост в использовании.

0

Итак, я изменил способ работы моего шаблона sub-header.php. В основном, некоторые базовые проверки того, какой тип страницы/сообщения был установлен/вызван, затем динамически вытащили соответствующую информацию о странице.

<?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 --> 
Смежные вопросы