Использование Timber для рефакторинга сложного шаблона WordPress

Меня привлекли к редизайну и сайту WordPress департамента колледжа, и я экспериментировал с использованием Timber, чтобы сделать шаблоны более чистыми и простыми в обслуживании.

Пока все шло действительно хорошо, но у меня много проблем с получением этого шаблона руководства по степени в настройке контроллера + вида.

Существуют пользовательские типы сообщений для степеней и курсов. Существует также специальная таксономия для сортировки курсов по семестрам и годам.

Ниже приведен код руководства для новичка года вместе со ссылкой на суть всего шаблона.

Я просто не знаю, с чего начать. Так что любая помощь, указатели или ресурсы с благодарностью!

  <?php if (is_single ( '19871' )) {
$freshmandegreeterms = 'freshman-year-bfa-filmmaking';
$springfreshmandegreeterms = 'spring-freshman-year-bfa-filmmaking';
$fallfreshmandegreeterms = 'fall-freshman-year-bfa-filmmaking';
} elseif (is_single ( '19872' )) {
$freshmandegreeterms = 'freshman-year-bs-mis';
$springfreshmandegreeterms = 'spring-freshman-year-bs-mis';
$fallfreshmandegreeterms = 'fall-freshman-year-bs-mis';
} elseif (is_single ( '19873' )) {
$freshmandegreeterms = 'freshman-year-bm-mis';
$springfreshmandegreeterms = 'spring-freshman-year-bm-mis';
$fallfreshmandegreeterms = 'fall-freshman-year-bm-mis';
}
elseif (is_single ( '19874' )) {
$freshmandegreeterms = 'freshman-year-ba-pop';
$springfreshmandegreeterms = 'spring-freshman-year-ba-pop';
$fallfreshmandegreeterms = 'fall-freshman-year-ba-pop';
}
?>
<h2>Freshman Year</h2>
<div id="freshmanyear" class="row">
<div id="freshmanfall"  class="medium-6 large-6 columns">
<table>
<tr>
<td style="font-weight:bold;">Fall</td>
</tr>
<?php
$fallfreshmanquery = new WP_Query( array ( 'post_type'      => 'course',
'posts_per_page' => 20,
'order' => ASC,
'orderby' => 'menu_order',
'tax_query' => array(
array(
'taxonomy' => 'degree-requirement',
'terms' => $fallfreshmandegreeterms,
'field' => 'slug'
)
) ) );
while ( $fallfreshmanquery->have_posts() ) : $fallfreshmanquery->the_post();
?>
<tr>
<td><a href="#" data-reveal-id="myModal<?php the_ID(); ?>">
<?php the_title(); ?>
</a>
<div id="myModal<?php the_ID(); ?>" class="reveal-modal" data-reveal>
<?php the_content(); ?><br/>
<?php if ( get_post_meta( get_the_ID(), 'wpcf-credit-hours', true ) ) : ?>
Credit Hours : <?php echo get_post_meta( get_the_ID(), 'wpcf-credit-hours', true ); ?>
<?php endif; ?>

<a class="close-reveal-modal">&#215;</a> </div></td>
</tr>
<?php endwhile;   ?>
</table>
</div>
<!-- end freshman fall -->
<div id="freshmanspring"  class="medium-6 large-6 columns">
<table>
<tr>
<td style="font-weight:bold;">Spring</td>
</tr>
<?php
$springfreshmanquery = new WP_Query( array ( 'post_type'      => 'course',
'posts_per_page' => 20,
'order' => ASC,
'orderby' => 'menu_order',
'tax_query' => array(
array(
'taxonomy' => 'degree-requirement',
'terms' => $springfreshmandegreeterms,
'field' => 'slug'
)
) ) );
while ( $springfreshmanquery->have_posts() ) : $springfreshmanquery->the_post();
?>
<tr>
<td><a href="#" data-reveal-id="myModal<?php the_ID(); ?>">
<?php the_title(); ?>
</a>
<div id="myModal<?php the_ID(); ?>" class="reveal-modal" data-reveal>
<h2>
<?php the_title(); ?>
</h2>
<p>
<?php the_content(); ?><br/>
<?php if ( get_post_meta( get_the_ID(), 'wpcf-credit-hours', true ) ) : ?>
Credit Hours : <?php echo get_post_meta( get_the_ID(), 'wpcf-credit-hours', true ); ?>
<?php endif; ?>
</p>
<a class="close-reveal-modal">&#215;</a> </div></td>
</tr>
<?php endwhile;   ?>
</table>
</div>
<!-- end freshman Spring -->
</div>
<!-- end freshman year -->

Вот ссылка на полная суть.

1

Решение

Не совсем конкретный вопрос, но вот некоторые вещи, которые могут помочь.

Вы можете создать собственный плагин wordpress (класс) для некоторой логики контроллера. В этом плагине он может определить значение $ freshmandegreeterms.

Одним из способов сортировки значения $ freshmandegreeterms является создание функции, которая принимает аргумент, то есть «19874». Что-то вроде:

public function set_freshman_terms( $code ) {
$terms = [
//Add necessary terms below
'19871' => 'freshman-year-bfa-filmmaking',
'19872' => 'freshman-year-bs-mis',
]

$term = $terms[$code];

$freshman           = [];
$freshman['term']   = $term;
$freshman['fall']   = 'fall-'.$term;
$freshman['spring'] = 'spring-'.$term;

//Set context
$context['freshman'] = $freshman;
}

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

{{ freshman.term }}
{{ freshman.fall }}
{{ freshman.spring }}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]