Использование functions.php для включения кода, который обрабатывается встроенным

У меня несколько сложный шаблон WordPress, который усложняется по мере того, как клиент хочет, чтобы он работал таким образом при одном условии и другим способом в другом состоянии и т. Д. И т. Д.

На домашней странице есть два столбца ячеек с 4 типами контента.

  1. Там блок кода для каждой предстоящей конференции. Они берут первые ячейки.

  2. Существует блок кода для конференц-услуг. Это займет последнюю ячейку, если есть нечетное количество конференций. Это означает, что это содержимое будет всегда находиться в правой части страницы, если оно будет показано.

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

Он будет отображаться в правой колонке сразу после конференций, если есть нечетное количество конференций и с левой стороны, сразу после конференций, если есть четное количество конференций.

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

Таким образом, ячейки Watch List и Webinar Series могут отображаться в правом или левом столбцах в зависимости от количества предстоящих конференций и будет ли отображаться список наблюдения. , Я хотел бы создать функцию в functions.php для этих двух блоков кода, потому что файл шаблона становится довольно громоздким для поддержки и добавления.

Потребуется, что есть запрос, который вытягивает поля содержимого из одного конкретного сообщения. Я хотел бы, чтобы запрос находился вне функции, но foreach выдает ошибку, поэтому я предполагаю, что функция фактически обрабатывается перед кодом в файле шаблона. Есть ли способ вызвать функцию в functions.php, где php является процессом, встроенным в остальную часть шаблона?

Код добавлен для уточнения. Это один из трех смещающих блоков кода, которые могут отображаться на странице. Я включил больше кода, чем то, что я хочу добавить в functions.php для контекста. Код, который я хочу переместить, начинается с эха ''; и заканчивается закрытием ячейки.

*** Обратите внимание, что этот код скоро изменится, чтобы удалить структуру таблицы, но это не является частью этого вопроса.

/* WATCH LIST AVAILABLE?: To decide whether to add a Watch List cell before the Webinar Series cell, check whether the Watch List post is published */ query_posts( 'p=1684&posts_per_page=1'); if ( get_post_status ( '1684' ) == 'publish' ) { /* CHECK WHETHER WATCH LIST AND WEBINAR WILL BE IN SAME ROW */ if(($NumberConferences % 2) == 0) { echo '<tr>'; while( have_posts() ) : the_post(); echo '<td>'; echo '<div class="RightBorderLayer">'; echo '<div class="HomeLeftCell">'; $HomeWatchListImage = types_render_field("watch-list-home-page-image", array("raw"=>"true")); if($HomeWatchListImage != '') echo '<a href="'.get_permalink().'"><img src="'.$HomeWatchListImage.'"></a>'; $WatchListTitles = get_post_meta($post->ID, 'wpcf-watch-list-title', false); $i = 1; foreach($WatchListTitles as $WatchListTitle) { echo '<li style="text-align: left;"><strong>Workshop '.$i.'</strong>: '.$WatchListTitle.'</li>'; $i++; } // End foreach echo '<div class="HomePageCellNote">If you are interested in any of these events and are not regularly receiving WFCA notices, signup for our email list in the bottom left of this page. All regular WFCA subscribers will receive notice of these events as available.</div>'; echo '<div style="clear: both;"></div>'; echo '</div><!-- End Home Left Cell div -->'; echo '</div><!-- End Right Border Layer -->'; echo '</td>'; endwhile; wp_reset_postdata(); 

Solutions Collecting From Web of "Использование functions.php для включения кода, который обрабатывается встроенным"

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

Это поможет немного очистить шаблон.

 <?php query_posts( 'p=1684&posts_per_page=1'); if ( get_post_status ( '1684' ) == 'publish' ) { /* CHECK WHETHER WATCH LIST AND WEBINAR WILL BE IN SAME ROW */ if(($NumberConferences % 2) == 0) { get_template_part( 'template-parts/watch', 'list' ); } else { get_template_part( 'template-parts/other', 'template' ); } } /** * Template part "watch-list.php" * Location: wp-themes/[theme]/template-parts/watch-list.php */ echo '<tr>'; while( have_posts() ) : the_post(); echo '<td>'; echo '<div class="RightBorderLayer">'; echo '<div class="HomeLeftCell">'; $HomeWatchListImage = types_render_field("watch-list-home-page-image", array("raw"=>"true")); if($HomeWatchListImage != '') echo '<a href="'.get_permalink().'"><img src="'.$HomeWatchListImage.'"></a>'; $WatchListTitles = get_post_meta($post->ID, 'wpcf-watch-list-title', false); $i = 1; foreach($WatchListTitles as $WatchListTitle) { echo '<li style="text-align: left;"><strong>Workshop '.$i.'</strong>: '.$WatchListTitle.'</li>'; $i++; } // End foreach echo '<div class="HomePageCellNote">If you are interested in any of these events and are not regularly receiving WFCA notices, signup for our email list in the bottom left of this page. All regular WFCA subscribers will receive notice of these events as available.</div>'; echo '<div style="clear: both;"></div>'; echo '</div><!-- End Home Left Cell div -->'; echo '</div><!-- End Right Border Layer -->'; echo '</td>'; endwhile; wp_reset_postdata(); echo '</tr>'; 

Если вам нужно передать переменные из основного шаблона в часть шаблона, вам нужно будет использовать следующий код:

include( locate_template( 'template-parts/watch-list.php' ) );


Старый ответ (пример функции)

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

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

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

Хотя это прямо не отвечает на ваш вопрос, он, надеюсь, поставит вас на правильный путь. Если нет, добавьте комментарий, и я обновлю соответствующим образом.

 <?php /** * template-file.php */ while ( have_posts() ) : the_post(); $the_id = get_the_ID(); if ( 'Condition X' == 'Condition X' ) { so_dynamic_content( 'left', $the_id ); } else { so_dynamic_content( 'right', $the_id ); } endwhile; /** * functions.php */ function so_dynamic_content( $layout, $post_id = '' ) { if ( $post_id == '' ) { global $post; $post_id = $post->ID; } ob_start(); ?> <div class="dynamic-content <?php echo $layout; ?>"> <p>Text</p> <a href="<?php echo get_permalink( $post_id ); ?>">Anchor</a> <!-- HTML stuff --> </div> <?php $content = ob_get_clean(); echo $content; }