6мая
2007

Как публиковать отдельно от основной ленты выбираемый в админке пост

Закончил на днях разработку очередного сайта на движке WordPress - можно сказать новостного портала. В процессе работы возникла одна нелегкая задача, суть которой заключалась в следующем:

1) на сайте должен присутствовать блок "Новость дня", в котором будет выводиться новость по выбору администратора;

2) необходима возможность каким-то образом прямо в админке помечать нужную новость, как "избранную" (вариант, когда используется query_posts, в данном случае не подходит, поскольку "новость дня" будет определяться очень часто, а редактировать для этого шаблон, чтобы каждый раз указывать новый ID поста, весьма неудобно; идеальный вариант - когда можно пометить новость в момент ее написания/редактирования);

3) важно, чтобы при этом новость не выпадала из основной ленты новостей, т.е. одновременно присутствовала и в общей ленте, и в отдельном блоке;

4) желательно, чтобы для решения задачи можно было воспользоваться готовыми решениями/плагинами без необходимости что-либо программировать;

5) плюсом также будет и простота в настройке.

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

Мое внимание в этом отношении привлекли 2 плагина:

1) AdHesive - позволяет закрепить запись в ленте выше всех остальных, независимо от даты ее написания.
2) Solvent - некая противоположность плагину AdHesive, исключает выбранную запись из текущей ленты.

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

Т.е. получается, что я нашел способ, как пометить нужную новость, осталось только разобраться как вывести такую запись на страницу, но при этом сделать так, чтобы плагин AdHesive (или Solvent) не выполняли свою основную функцию - закрепление или исключение "избранной" записи.

На глаза мне попался еще один малюсенький плагин, который как раз и пригодился. Get-a-Post - этот плагин, собственно выполняет то же самое, что и query_posts, с одним лишь отличием, что, в добавок, позволяет выводить посты, помеченные sticky-меткой (которую ставит плагин AdHesive). А это и есть как раз то, что мне было нужно. ;)

Из тех двух плагинов воспользовался Solvent, т.к. легко получилось отключить его основную функцию, да и размером он тоже маленький.

Теперь осталось подправить пару строчек в плагинах Solvent и Get-a-Post, чтобы породнить их.

Итак, нужно выполнить следующее:

1) в файле solvent.php находим строку:

  1. if (!in_array($post->ID, $slippers))

и закомментируем ее, тем самым отключив функцию исключения поста из ленты:

  1. //if (!in_array($post->ID, $slippers))

2) в этом же файле заменим на нужное (если требуется) слово Slippery (это слово, которое отображается в админке) в следующей строке:

  1. <div id="solventdiv"><label class="selectit"><input type="checkbox" name="solvent_slippery" value="true"<?php echo $checked; ?/> /> Slippery</label></div>

3) в файле get-a-post.php находим строку:

  1. $query_suffix = "ID = post_id AND meta_key = 'sticky' AND meta_value = 1";

и заменяем в ней sticky на slippery.

Вуаля! Задача решена.

P.S. Для вывода "избранной" новости в нужное место страницы используется следующая функция:

  1. <?php get_a_post(GETSTICKY); ?>

После нее нужно вставить теги шаблона, используемые в цикле, такие как the_content(), the_title() и т.д.

Эта запись опубликована в Воскресенье, 06 мая 2007 г. в 10:55 в рубрике Нестандартные задачи. Вы можете получать обновления комментариев к этой записи с помощью RSS 2.0. Также можно оставлять комментарии или trackback с вашего сайта.

автор: Dimox

Комментариев: 21 »

  1. :

    Дык можно сразу это объединить в один плагин?! зачем читателям мучаться с измненением-объединением этих 2 плагинов? :)

  2. :

    Попробовал объединить, но при активации вылазит ошибка. Не знаю, как ее устранить.

  3. :

    Извините, за оффтоп.
    Создал блог на wordpress.com, но писать через браузер не охота. Подскажи софт для постинга в wordpress.com.
    Слышал, что можно через Semagic. А вот как настроить его на WordPress.com, я вот не нашел. Подскажи.

  4. :

    Igor, http://semagic.sourceforge.net/api.html
    используем рис. 2 :)

  5. :

    Законектился, но при отправки сообщения появляется ошибка: "Sorry, you can not post on this weblog or category."

  6. :

    дык значит категория неправильно выбрана. попробуйте обновить категории.

  7. :

    Спасибо большое - значительная часть моей задачи решена :)
    Но возникла мысль - а зациклить вывод как-нибудь можно, если в базе есть несколько постов с меткой Slippery?
    То есть, сделать возможным вывод не одной, а, например, трех новостей?

  8. :

    cloot, спасибо.

    Зациклить такие записи - задача хитрая :), но я думаю, что ее можно решить, используя цикл "foreach". Нужо написать запрос к БД, который проверяет посты на наличие метки "Slippery".

  9. :

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

  10. :

    Наверное, нет смысла нам открывать форум, поскольку уже есть 2 популярных, где и тусуется вордпрессовский народ :)

    1) http://maxsite.org/forum/
    2) http://mywordpress.ru/support/

  11. :

    спасибо! очень познавательно!

  12. :

    Пожалуйста, StyleXP! ;)

  13. :

    Меня тут недавно осенило, ведь можно просто доп. категорию присваивать записи, которая должна быть отдельно.
    И выводить ее отдельно, оформляя как угодно.
    Я так сделала на http://gibe.ru/, из общей ленты такая запись не выпадает.
    И «снять» ее с «особой» позиции легко — галку убрать с доп. категории в админке.

  14. :

    А ведь действительно так и получается :). Не зря же говорится, что все гениальное просто.

    Спасибо, sonika, за идею!

  15. :

    А можно ли несколько новостей выводить таким способом? И как?

  16. :

    И ещё вопрос, можно ли сделать чтобы у старой новости не надо было отменять вывод? Чтобы выводилось та новость, которую последней отметили...

  17. :

    > А можно ли несколько новостей выводить таким способом?
    Если я вас правильно понял, то я отвечал на подобный вопрос выше.

    > можно ли сделать чтобы у старой новости не надо было отменять вывод?
    Нельзя.

  18. :

    sonika
    а можно поподробней обьяснить как это сделать

  19. :

    Закончил на днях разработку очередного сайта на движке WordPress - можно сказать новостного портала

    А где можно посмотреть этот сайт?

  20. :

    Compass, нельзя. Конфиденциально. Если бы это был мой сайт, сказал бы.

  21. :

    Игорь, напишите мне на мыло sonika блаблабла sonika.ru я Вам этот файл вышлю, а то боюсь здесь коряво отобразится.

 Оставить комментарий



 

Разрешенные тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>