То, что я пытаюсь сделать, показывают новое сообщение (а-ля "single.php" моей темы) на моей "домашней" странице.
Это осложнено тем, что у меня есть определенные плагины (а именно, Сценарии n Стили), которые сцепляют wp_head и wp_enqueue_scripts. В этих рычагах они проверяют is_singular (), чтобы видеть, должен ли мой по почте JavaScript быть введен в страницу или нет. Они затем проверяют атрибуты глобальной переменной $post для определения который сценарии ввести. Я хочу по почте JavaScript быть правильно введенным на домашней странице в случае необходимости.
Для ссылки плагин в исходном коде вопроса здесь и определенная функция, которую я обеспокоен выполнением, правильно назван scripts_in_head()
:
static function scripts_in_head() {
// Global
$options = get_option( 'SnS_options' );
if ( ! empty( $options ) && ! empty( $options[ 'scripts_in_head' ] ) ) {
?><script type="text/javascript" id="sns_global_scripts_in_head"><?php
echo $options[ 'scripts_in_head' ];
?></script><?php
}
if ( ! is_singular() ) return;
// Individual
global $post;
$SnS = get_post_meta( $post->ID, '_SnS', true );
$scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
if ( ! empty( $scripts ) && ! empty( $scripts[ 'scripts_in_head' ] ) ) {
?><script type="text/javascript" id="sns_scripts_in_head"><?php
echo $scripts[ 'scripts_in_head' ];
?></script><?php
}
}
Я довольно плохо знаком с разработкой Wordpress, таким образом, я, вероятно, сделал глупую ошибку здесь, которая делает мою жизнь чрезмерно трудной. Вот различные и различные способы, которыми я бил головой о стену:
Из того, что я понимаю, я не могу просто изменить мой home.php
шаблон, так как шаблон даже не выполняется, пока все эти рычаги уже не работали бы. Поэтому изменение запроса в этой точке или создание нового были бы бессмысленны.
Я мог использовать перенаправление HTTP-заголовка, хотя я не уверен, что это работало бы, вручную не обновляя перенаправление каждый раз последние изменения сообщения.
Я мог измениться home.php
чтобы иметь перенаправление JavaScript, но это кажется, что было бы много времени/усилия, потраченного впустую, загрузив "мертвую" домашнюю страницу только, чтобы быть перенаправленным к другой странице. Если это - единственный путь, пусть будет так, но кажется, что я должен смочь добиться большего успеха.
Я попытался создать плагин, который сцепляет ранее, чем Сценарии n Стили и изменяет $wp_query, но это, кажется, не работает правильно. Вероятно, я делаю его неправильно:
function make_single_from_home()
global $wp_query;
if ( $wp_query->is_home() ) {
$last = wp_get_recent_posts( '1');
$last_id = $last['0']['ID'];
$wp_query->set( 'p', $last_id )
$wp_query->set( 'post_count', 1);
$wp_query->set( 'is_home', false);
$wp_query->set( 'is_single', true);
}
}
Я попытался присоединить это к нескольким событиям до Сценариев n рычаг Стилей, (send_header, template_redirect, и т.д.), и это, кажется, не помогает. Я не вижу, что блоки JavaScript добавляются к моему <head>
тег. (Возможно, что это - допустимое решение, и я или плагин просто Делаем Его Неправильно),
Также возможно, что существует действительно простой способ сделать мою домашнюю страницу исключительной страницей, показывающей мое последнее сообщение, и я являюсь просто слишком новым для понимания этого.
Есть ли некоторый способ создать домашнюю страницу, которая показывает просто последнее сообщение при создании $post
допустимая переменная, и is_singular() == true
достаточно рано для моих сменных зависимостей?
Ответ микросхемы помог мне зафиксировать ошибку, но потребовалось немного больше тонкой настройки для решения его полностью.
Со статической первой полосой, front-page.php
шаблон назовут (согласно иерархии) с $wp_query
заполненный со страницей ID, которая соответствует странице, которую Вы приняли решение показать "статической страницей" в опциях чтения.
Микросхема предложила создать новый запрос после get_header()
звоните, который может помочь изменить сообщения, которые показываются. Он также корректен, в который, вследствие настроек проанализировал $wp_query
к front-page.php
шаблон, is_singular()
вызов возвратится TRUE
.
Однако это не решит проблему значения $post
. Как только get_header()
назван, большинство тем усовершенствует цепочку действия от template_redirect
мимо wp_enqueue_scripts
. Любые рычаги, промежуточные там, назовут, и будет слишком поздно для осуществления значения $wp_query
или $post
для плагинов, которые сцепляют одно из событий в том регионе.
Поэтому wp_head
действие становилось названным с $post
информация от "статической страницы" запись. Так как я не хочу, чтобы это произошло, я должен изменить эти значения так или иначе до вызова к get_header()
.
Существует, вероятно, несколько способов сделать это, но тот, который работал на меня, должен был добавить:
global $wp_query;
$last = wp_get_recent_posts(array('numberposts'=>'1','post_status'=>'publish' ));
$last_id = $last['0']['ID'];
$wp_query = new WP_Query('p='.$last_id);
к моему front-page.php
до вызова к get_header()
. Это перезаписывает значение запроса, сгенерированное от статической страницы, и заменяет его тем, который возвращает просто новое сообщение.
Вероятно, возможно сделать это с плагином также, пока Вы сцепляетесь достаточно рано.
Я не уверен, как сменные рычаги повлияли бы всегда на решение Вашей проблемы. home.php
шаблонный файл включен в template_redirect
действие, которое стреляет задолго до того wp_head
.
Тем не менее то, на что это походит, Вы хотите сделать:
'posts_per_page' = 1
на первой странице индекса сообщений в блоге'posts_per_page' = 10
на последующих страницах индекса сообщений в блогеСамый простой метод должен, вероятно, использовать статическую страницу в качестве первой полосы сайта и затем использовать пользовательский запрос в front-page.php
получать последнее сообщение.
front-page.php
:
get_header();
$latest_post_args = array(
'post_per_page' = 1;
);
$latest_post = new WP_Query( $latest_post_args );
if ( $latest_post->have_posts() ) : while ( $latest_post->have-posts() ) : $latest_post->the_post();
// Loop markup goes here
endwhile; endif;
wp_reset_postdata();
get_footer();
С тех пор is_singular()
возвращает true для статических страниц как первая полоса сайта, Ваш сменный сценарий ставит в очередь, должно быть незатронутым.
is_singular()
TRUE
на static-page-as-front-page.
– Chip Bennett
27.11.2012, 20:42
post
- тот набор (правильно, к последнему сообщению) к тому времени, когда я звонил get_header()
?
– agent86
27.11.2012, 20:53
$wp_query
беспокоит разработчика программного обеспечения во мне, кто хочет разделение и слабую связь. Я не знаю, нарушает ли это какой-либо конкретный WP кодирование инструкций также. Я могу пересмотреть это решение, если я могу придумать более изящный способ реализовать его. – agent86 28.11.2012, 23:23