Как объединить страницы (и их шаблоны) в одну страницу?

Я хочу, чтобы CMS имела разные страницы (например, «Карьера», «Работа», «Команда»), каждая из которых имела свой собственный шаблон, но затем объединяла их в одну большую прокручиваемую страницу (например, «Наша компания»). шаблон. Как бы я это сделал?

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

  1. Мне нужны и страница, и шаблон, чтобы я мог выводить их на главную страницу.

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

Это возможно?


person Don Rhummy    schedule 30.01.2014    source источник


Ответы (3)


Сначала для шаблона главной страницы выберите шаблон по умолчанию и напишите туда свои глобальные элементы. И в этом шаблоне используйте часть get_template для включения страниц

<!--custom query for pages-->
<?php
$args= array('post_type'=>'page');
$query= new WP_Query($args);  
$query->while(have_posts()):query->the_post(); 
 $temp_name= get_page_template_slug( $post->ID );       
 $temp_name_exp =explode('.',$temp_name);
 get_template_part($temp_name_exp[0]); 

endwhile;
endif;
?>

и на страницах карьеры, блога и т. д.

<?php
/*
Template name: Career or blog or something else
*/ 
?>
<?php the_tiele();
      the_content();
 ?>

для «Я также хочу, чтобы, если кто-то щелкнет в меню навигации, чтобы перейти к «Вакансии» или «Команда», он перенаправит их на страницу «Наша компания», но со строкой запроса, чтобы я мог прокрутить их до этой части страница" назначьте каждую оболочку страницы для примера страницы <section class="<?php echo $post->post_name; ?>"> и напишите функцию для перенаправления ссылки на страницу просмотра на http://yoursiteurl/#page-slug

person lcshobin    schedule 25.11.2014

ИЗМЕНИТЬ

Чтобы перенести содержимое одной страницы на другую, используйте следующую функцию:

function show_post($path){
 $post = get_page_by_path($path);
 $content = apply_filters('the_content', $post->post_content);
 echo $content;
}

а затем создайте шаблон для страницы «Наша компания» (например, template-our_company.php), в котором вы будете вызывать функцию (например, <?php show_post('careers'); /* Shows the content of the "Careers" page using the slug. */ ?>).

Таким образом, файл шаблона должен включать что-то вроде этого:

<?php
show_post('careers'); 
show_post('jobs'); 
show_post('team'); 
?>

Для вашего второго вопроса вам нужно настроить файл template-our_company.php следующим образом:

<?php
<div id="careers"></div>
show_post('careers'); 
<div id="jobs"></div>
show_post('jobs'); 
<div id="team"></div>
show_post('team'); 
?>

а затем в панели меню просто настройте навигационную ссылку на что-то вроде «/our-company/#careers» и т. д.

ИЗМЕНИТЬ 2

Чтобы получить содержимое страниц с указанными шаблонами в другом шаблоне, вы можете сделать следующее: Создать шаблоны (файлы careers.php и jobs.php) и посты, которые будут использовать эти шаблоны.

/*
Template Name: Careers
*/

...

/*
Template Name: Jobs
*/

Затем в «родительском» шаблоне вы можете запросить сообщения, в которых указанные выше шаблоны выбрали непроверенный код.

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => '_wp_page_template',
            'value' => 'careers.php',
            'compare' => '='
        ),
        array(
            'key' => '_wp_page_template',
            'value' => 'jobs.php',
            'compare' => '='
        )
    )
);

$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post );
    the_content();
    // or add anything else
endforeach; 
wp_reset_postdata();
person Manolis    schedule 01.02.2014
comment
Спасибо! как мне применить содержание карьеры только к части шаблона карьеры? (и то же самое для других) - person Don Rhummy; 01.02.2014
comment
Я отредактировал свой ответ. Просто создайте страницы как обычно, без прикрепленного к ним шаблона, затем для страницы Наша компания используйте шаблон, о котором я упоминал (template-our_company.php), и следуйте инструкциям выше. - person Manolis; 01.02.2014
comment
это не сработает. Мне нужно это, чтобы новые страницы можно было добавить позже и выбрать определенный шаблон для содержимого этой страницы. вот почему я хочу, чтобы каждая страница имела шаблон, но могла включать этот контент/шаблон на комбинированную страницу. например, я мог бы добавить наших суперзвезд и придать шаблону расположение людей. в вашем текущем ответе нет способа сделать это. Мне пришлось бы вручную изменить код/шаблон объединенной страницы. - person Don Rhummy; 01.02.2014
comment
Как упоминается в Кодексе, шаблоны страниц могут работать только в одну сторону, чтобы страницы вашего веб-сайта выглядели примерно одинаково (codex. wordpress.org/Page_Templates) — обеспечивает структуру, позволяющую отображать содержимое страницы соответствующим образом. - person Manolis; 01.02.2014
comment
что вы имеете в виду, что они только в одну сторону? - person Don Rhummy; 01.02.2014
comment
Означает, что вы можете использовать только для предоставления структуры страницы, для которой они будут использоваться, вы не можете назначить шаблон какой-либо странице, а затем вызвать шаблон, чтобы получить содержимое страницы. - person Manolis; 01.02.2014
comment
да, я знаю. но я должен иметь возможность получить шаблон, получить содержимое, а затем применить содержимое к шаблону, затем взять этот вывод и добавить его к выводу страницы. - person Don Rhummy; 01.02.2014

Ответ @ user3418748 был для меня хорошим началом, но в моем случае мне нужно было загружать определенные страницы, и я обнаружил, что простое использование get_template_part() само по себе не загружало какой-либо контент, потому что я делал это вне цикла. Чтобы заставить это работать, вам нужно сначала установить глобальную переменную $post на страницу/публикацию, которую вы хотите отобразить. Вот функция, которую я использовал (замените mytemplate на имя вашего шаблона):

function mytemplate_show_page($path) {
    global $post;
    $post = get_page_by_path($path);
    $tpl_slug = get_page_template_slug($post->ID);
    $tpl_slug_exp = explode('.', $tpl_slug);
    get_template_part($tpl_slug_exp[0]);
}
person Matt Browne    schedule 04.07.2016