Как я показываю только последнее сообщение на своей домашней странице при поддержании надлежащих сменных рычагов?

То, что я пытаюсь сделать, показывают новое сообщение (а-ля "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 достаточно рано для моих сменных зависимостей?

1
27.11.2012, 21:37
2 ответа

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

Со статической первой полосой, 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(). Это перезаписывает значение запроса, сгенерированное от статической страницы, и заменяет его тем, который возвращает просто новое сообщение.

Вероятно, возможно сделать это с плагином также, пока Вы сцепляетесь достаточно рано.

0
19.02.2020, 23:05
  • 1
    Перезапись $wp_query беспокоит разработчика программного обеспечения во мне, кто хочет разделение и слабую связь. Я не знаю, нарушает ли это какой-либо конкретный WP кодирование инструкций также. Я могу пересмотреть это решение, если я могу придумать более изящный способ реализовать его. –  agent86 28.11.2012, 23:23
  • 2
    , Учитывая Ваш ответ, посмотрите мое изменение его. Не мог бы побеспокоить Вас так же. –  Johannes Pille 28.11.2012, 23:45
  • 3
    Это - единственная вещь к настоящему времени, я нашел, что работы, таким образом, я предполагаю, что лучше, чтобы мог быть сделан. Вздох. –  agent86 08.12.2012, 16:51

Я не уверен, как сменные рычаги повлияли бы всегда на решение Вашей проблемы. home.php шаблонный файл включен в template_redirect действие, которое стреляет задолго до того wp_head.

Тем не менее то, на что это походит, Вы хотите сделать:

  1. Иметь 'posts_per_page' = 1 на первой странице индекса сообщений в блоге
  2. Иметь '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 для статических страниц как первая полоса сайта, Ваш сменный сценарий ставит в очередь, должно быть незатронутым.

1
19.02.2020, 23:05
  • 1
    Появляется, как будто get_header () вызов включает файл, который называет wp_head () (по крайней мере). Разве это не совершенствовалось бы, цепочка, до такой степени, когда изменяющая запрос, больше не будет влиять на сценарии то использование wp_head? –  agent86 27.11.2012, 20:39
  • 2
    Почему это было бы проблемой? По умолчанию, is_singular() TRUE на static-page-as-front-page. –  Chip Bennett 27.11.2012, 20:42
  • 3
    я попробовал этот подход и он все еще не загружает JavaScript, таким образом, я ищу то, что могло потенциально быть проблемой. Плагин также смотрит на значение post - тот набор (правильно, к последнему сообщению) к тому времени, когда я звонил get_header()? –  agent86 27.11.2012, 20:53
  • 4
    Можно ли добавить Сменные обратные вызовы к вопросу? Это переходит к сути дела, на который будет невозможно ответить точно, не видя то, что Плагины на самом деле пытаются сделать. –  Chip Bennett 27.11.2012, 20:56
  • 5
    я связал исходный код плагина (их SVN repo) и вызвал определенную функцию, я пытаюсь получить работу. Я вызвал проблему $post рано в вопросе, но похоже, что я оставил его от своей сводки в конце. –  agent86 27.11.2012, 21:33

Теги

Похожие вопросы