Чекбокс «Опубликовать на главной»

[ ←Вернуться к стандартному виду ]

Печатная версия

sonika.ru Оказывается, организовать в WordPress чекбокс «опубликовать на главной» неимоверно просто! В этом поучавствуют мои любимые custom fileds.

Cуть в том, что записи с отмеченным чекбоксом появятся на главной странице блога, остальные — нет.

UPD Ю.Б. написал плагин On Home Page, который «всё сделает сам».

Для нечайников: перейти сразу к нужному абзацу.

Для этого мы создаем произвольное поле с ключем опубликовать на главной и в значение ему пишем 1. Все это можно привести в более божеский вид и поместить чекбокс под полем визуального редактирования записи — для удобства пользователя. Берем любой плагин для работы с custom fields в админ. панели:

  • Custom Write Panel для wp 2.2
    wordpress.org/extend/plugins/custom-write-panel/
  • Freshpost для wp 2.3 —2.6 (модификация плагина Custom Write Panel)
    wordpress.org/extend/plugins/fresh-page/
  • Flutter — более навороченная версия Freshpost (для wp 2.5 и выше)
    freshout.us/goodies/fresh-post-for-wordpress-wordpress-cms/
  • more fields
    wordpress.org/extend/plugins/more-fields/
  • оригинальный плагин Custom Field GUI
    rhymedcode.net/custom-field-gui/custom-field-gui/
  • или Custom Field GUI в модификации Максима «MaxSite - Произвольные поля»

Нет никакой разницы какой плагин вы будете использовать для вывода чекбокса на странице создания/редактирования записей, выполняя одну и ту же задачу (управление custom fields в админ. панели) эти плагины просто отличаются степенью навороченности функций и визуальным управлением произвольными полями.

Покажу на примере плагина «MaxSite - Произвольные поля», который будет работать со всеми версиями WordPress.

Устанавливаем плагин, берем файл conf-sample.ini и переименовываем его в conf.ini, содержимое файла должно быть таким conf.ini:

[Отметьте, чтобы опубликовать на главной]
type = checkbox
mymeta = опубликовать на главной

Загружаем conf.ini в папку плагина rc-custom-field-gui. Все готово, чекбокс на месте, осталось чуть модифицировать код главной страницы. За вывод записей на главной отвечает файл-шаблон home.php или index.php (зависит от вашей Темы, подробнее читайте тут о иерархии шаблонов).

Перед началом цикла (луп, он же Loop) пишем:

<?php query_posts($query_string.'&meta_key=опубликовать на главной&meta_value=1'); ?>

Все готово!

Стандартный цикл (луп) начинается с и заканчивается строчкой

Только для WordPress 2.6 и выше

Для тех, кто совсем в танке :) привожу полный код лупа Темы default с нужной строчкой query_posts в начале:

<?php query_posts($query_string.'&meta_key=опубликовать на главной&meta_value=1'); ?>
<div id="post-<?php the_ID(); ?>" class="post">
<h2><a title="<?php printf(__('Permanent Link to %s', 'kubrick'), the_title_attribute('echo=0')); ?>" rel="bookmark" href=<?php the_permalink() ?>"></a></h2>
<small> by </small>
<p class="postmetadata">'); ?> |</p>
</div>

Для WordPress 2.5 и ниже

В WP 2.5 и ниже все немного сложнее с выводом постов, содержащих определенный ключ и значение произвольного поля, стандартный цикл преобразуется в такой (изменения в строчках 1--14 и 24):

<?php
$querystr = "
SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.ID = wpostmeta.post_id
AND wpostmeta.meta_key = 'опубликовать на главной'
AND wpostmeta.meta_value = '1'
AND wposts.post_status = 'publish'
AND wposts.post_type = 'post'
ORDER BY wposts.post_date DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
?>
<?php if ($pageposts): foreach ($pageposts as $post): setup_postdata($post); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('Permanent Link to %s', 'kubrick'), the_title_attribute('echo=0')); ?>"><?php the_title(); ?></a></h2>
<small><?php the_time(__('F jS, Y', 'kubrick')) ?> <!-- by <?php the_author() ?> --></small>

<div class="entry">
<?php the_content(__('Read the rest of this entry &raquo;', 'kubrick')); ?>
</div>
<p class="postmetadata"><?php the_tags(__('Tags:', 'kubrick') . ' ', ', ', '<br />'); ?> <?php printf(__('Posted in %s', 'kubrick'), get_the_category_list(', ')); ?> | <?php edit_post_link(__('Edit', 'kubrick'), '', ' | '); ?>  <?php comments_popup_link(__('No Comments &#187;', 'kubrick'), __('1 Comment &#187;', 'kubrick'), __('% Comments &#187;', 'kubrick')); ?></p>
</div>
<?php endforeach; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link(__('&laquo; Older Entries', 'kubrick')) ?></div>
<div class="alignright"><?php previous_posts_link(__('Newer Entries &raquo;', 'kubrick')) ?></div>
</div>
<?php else : ?>
<h2 class="center"><?php _e('Not Found', 'kubrick'); ?></h2>
<p class="center"><?php _e('Sorry, but you are looking for something that isn&#8217;t here.', 'kubrick'); ?></p>
<?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>

Скриншот:

Таким же образом можно выводить еще один цикл в сайдбаре например выведем 10 записей из рубрики с id=34 с отмеченной галочкой «опубликовать на главной», код такой:

<ul class="is_kat">
<?php
$posts_new = get_posts('category=34&numberposts=10&meta_key=опубликовать на главной&meta_value=1');
foreach ($posts_new as $post_new) :
echo '<li class="news_item"><a href="';
echo get_permalink($post_new->ID);
echo '">';
echo mysql2date('j.m.Y',  $post_new->post_date);
echo ' - ';
echo $post_new->post_title;
echo '</a></li>';
endforeach;
?>
</ul>

Множество вариаций этого кода можно найти в данном топике форума.


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

  1. # Илья 23.09.2008 в 10:30

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

  2. # sonika 23.09.2008 в 10:56

    Что значит "постоянный вывод"?

  3. # Илья 23.09.2008 в 12:29

    Что значит “постоянный вывод”?

    То есть, новости всегда должны выводиться на главной.

  4. # Flector (3) 23.09.2008 в 15:13

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

  5. # sonika 23.09.2008 в 17:44

    Flector, надо какие-то плагины использовать для вырезания из RSS, но я не озадачивалась таким вопросом, т.к. смысл (для меня) этой «техники» в том, что если ВП используется как CMS для сайта, то на главной можно выводить только актуальные новости/предложения — т.е. я не хочу их скрывать вообще отовсюду, просто показывать на морде действующие предложения и не более. В CMS фид вообще как-то не очень пользуется спросом, контингент не тот :)

  6. # sonika 23.09.2008 в 17:48

    Илья, ну так одно другому не мешает:
    <?php query_posts($query_string.'&meta_key=опубликовать на главной&meta_value=1&cat=4'); ?>
    все зависит от целей и задач :P

  7. # LVA 24.09.2008 в 18:10

    у плагина MoreFields есть 2 неприятных глюка:
    1. из-за ревизий customfields дублируются
    2. если пост "в ожидании публикации", то в день и час Х customfileds сбросятся в null

  8. # San Miguel (8) 25.09.2008 в 23:32

    o_O

    Cуть в том, что записи с отмеченным чекбоксом появятся на главной странице блога, остальные — нет.

    ... что-то я не совсем понял! А разве последние записи автоматически не публикуются на главной? И куда деваются тогда те, которые не отмечены чекбоксом?

  9. # San Miguel (8) 25.09.2008 в 23:51

    у плагина MoreFields есть 2 неприятных глюка:
    1. из-за ревизий customfields дублируются
    2. если пост “в ожидании публикации”, то в день и час Х customfileds сбросятся в null

    ... хорошо, тогда что посоветуете использовать?
    Я еще вообще с трудом представляю, зачем нужны кустомы, но до сознания доходит, что с помощью них можно будет значительно расширить возможности создания поиска (advanced search) по значению key и value

  10. # sonika (301) 26.09.2008 в 01:17

    А разве последние записи автоматически не публикуются на главной? И куда деваются тогда те, которые не отмечены чекбоксом?

    По дефолту на главную выводятся все записи -- как лента постов в хронологическом порядке (в конце концов WordPress -- это блоговый движок со всеми вытекающими из этого особенностями!). А если у меня не блог и мне не нужно выводить все подряд записи на главной, а только некоторые посты, причем из разных рубрик?
    Остальные записи никуда не деваются, "лежат" себе в своих рубриках, архивах, страницах тегов и т.п.
    Вы разберитесь сначала с логикой работы самого WordPress, тогда и вопросов будет меньше и они будут конкретные.

  11. # LVA 26.09.2008 в 15:06

    … хорошо, тогда что посоветуете использовать?

    А я и не писал, что его не нужно использовать =) Просто предупредил о глюках. К сожалению потестить другие плагины для customfileds пока еще не дошли руки

    Я еще вообще с трудом представляю, зачем нужны кустомы, но до сознания доходит, что с помощью них можно будет значительно расширить возможности создания поиска (advanced search) по значению key и value

    Не совсем понятно, что имеется ввиду под advanced search. Например, плагин search-everything и так очень гибко настраивает поиск на блоге (сайте) (... но тоже иммет свот глюки =) )

  12. # San Miguel (8) 26.09.2008 в 16:32

    Вы разберитесь сначала с логикой работы самого WordPress, тогда и вопросов будет меньше и они будут конкретные.

    На то он и учитель, чтобы давать советы... И ученик, :) чтобы внимать ответам на свои бесчисленные вопросы!

    Не сердитесь, я еще только учусь!
    Плагины поиска пробовал разные, но они все не те... а вот филды думаю помогут делать выборочный поиск из кей и вали

  13. # sonika (301) 26.09.2008 в 21:49

    San Miguel, лучший учитель ЭТОТ, зуб даю :)
    Насчет плагинов: я предпочитаю Freshpost для сложных проектов и Custom Field GUI для проектов попроще.

  14. # San Miguel (8) 27.09.2008 в 00:17

    , зуб даю :)

    ... на счет зуба погорячились... потому что мужчина может овладеть всеми 22.. 33, а то и больше! А на счет кодекса, не всегда он говорит! :)
    .. уважаю Вас!

  15. # San Miguel (8) 27.09.2008 в 00:23

    ...прежде чем посоветовать, пошлите человека на Кодекс куда подальше :)

  16. # San Miguel (8) 27.09.2008 в 00:26

    Муай Тай, не все так просто кажется, как WordPress...

  17. # San Miguel (8) 27.09.2008 в 00:27

    Хочешь овладеть миром, - овладей World Press :)

  18. # San Miguel (8) 27.09.2008 в 00:29

    ... извините, #16 перефразирую:
    Хочешь овладеть Миром?
    - Надавай по морде WordPress!

  19. # Ned (3) 01.10.2008 в 17:33

    Поставил Flutter, у меня и так в теме используются custom field, хочу упросить работу для авторов. Есть проблема (была и в TDO MF) с русскими наименованиями полей и форм. Отображаются вопросительными знаками. Кодировка на сайте UTF-8. Не знаете как лечится?

  20. # Ned (3) 01.10.2008 в 19:06

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

  21. # Dixм (1) 04.10.2008 в 04:02

    О спаибо (не спам) :)

  22. # Марина (5) 14.12.2008 в 00:33

    Sonika, все сделала, плагин загружен, файл conf изменен, в индексе в цикл Луп строчку внесла. В результате, чекбокс на месте, на главной, понятное дело, записей нет. Ставлю галочку- опубликоваить на главной и ничего не происходит. Заменить свой код лупа полностью на код лупа Темы default не получается, индекс перестает вызываться, пишет ошибку. Целый вечер мучалась, все перечитала, но так и не могу понять в чем дело. Может быть у вас есть идеи, в чем я ошибаюсь?

  23. # sonika (301) 14.12.2008 в 16:21

    Марина, если Вы поставили плагин On Home Page то ничего делать из нижеперечисленного не надо, плагин работает «автоматически», и цикл в файле-шаблоне своей Темы трогать не нужно. Плагин может не заработать в случае если у Вас в файле-шаблоне (отвечающем за вывод главной страницы) цикл начинается не так: if ( have_posts() ) : while ( have_posts() ) : the_post();. Да, и на WordPress 2.7 этот плагин никто не тестировал.
    Т.е. под стандартным цмклом понимается цикл, начинающийся с if ( have_posts() ) : while ( have_posts() ) : the_post();, а Тему default я указала для примера.

  24. # Марина (6) 14.12.2008 в 19:05

    Sonika, спасибо за ответ, да, луп начинается именно так. Но оба плагина не работают. В "MaxSite - Произвольные поля", появляются графы, но, когда ставлю галочки, не выводят посты на главную. В "On Home Page" почему-то не выводится сам чекбокс в админке. Пока не хватает моих знаний, чтобы разобраться. Но я вышла из положения. Применила custom fileds для вывода на главной, правда, они стали работать, только после внесения в код loop: <?php query_posts .
    Может сумбурно написала, я пока новичок в этом деле да и вообще, я собаковод, а не программист (хи-хи). Пока результат достигнут, а дальше буду разбираться. Спасибо за ваши статьи, очень помогают освоить WP.

  25. # Марина (6) 14.12.2008 в 19:10

    Пока писала, код "растерялся". Имелся ввиду вот этот код луп:

  26. # sonika 14.12.2008 в 20:06

    Да, кстати, можно писать или так:
    meta_key=опубликовать на главной&meta_value=1
    или так:
    meta_key=опубликовать на главной&meta_value=true
    Может в этом проблема, нет?

  27. # Марина (6) 14.12.2008 в 23:58

    Попробовала, похоже не в этом, снова все пропало, когда вернула: &meta_value=1, опять нормально стало. Странно, столько плагинов поставила, все было ОК. Даже интересно в чем загвоздка...Еще хотела спросить, не дадите наводочку на плагин, который прикрепляет пост сверху на главной? Или, может быть, можно с помощью custom fileds сделать?

  28. # sonika (301) 15.12.2008 в 00:59

    плагин, который прикрепляет пост сверху на главной?

    Марина, какая у Вас версия ВП? В 2.7 это фича встроенная (при написании поста справа Видимость: Редактировать —> поставить флажок «Закрепить на главной»), для предыдущих версий вордпресса есть плагин wp-sticky

  29. # Марина (6) 15.12.2008 в 01:37

    Sonika, версия у меня 2.6.2. В админке вижу призыв обновиться до 2.7. Но, побаиваюсь, ни разу этого не делала, и даже не устанавливала, WP идет предустановленным скриптом у моего хостера. Уже видела скриншоты админки 2.7, вообщем, что называется " и хочется и колется". Было бы интересно знать ваше мнение о 2.7, вы, как продвинутый "ворлдпрессовец" наверняка уже на нем обитаете? Спасибо за наводочку на плагин.

  30. # sonika (301) 15.12.2008 в 23:57

    Марина, обновляться лучше всего «вручную», почитайте здесь и здесь.

  31. # Марина (6) 16.12.2008 в 02:11

    Sonika, спасибо. wp-sticky, к сожалению не годится, тк выкидывает все предыдущие записи.

  32. # МПБ (1) 21.12.2008 в 19:12

    а как сделать наоборот? чтобы некоторые новости на главной НЕ ВЫВОДИЛИСЬ?

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

    хелп ми ))

    версия 2.6.5

  33. # sonika (301) 21.12.2008 в 22:13

    МПБ, исключить вывод постов рубрики «рекламок» из вывода на главную стр. с помощью query_posts('cat=-25') где 25 это ID исключаемой рубрики. Подробнее в кодексе.

  34. # Никита (2) 11.01.2009 в 16:48

    sonika, а можно по-подробнее с исключением записей из определённой рубрики в общем списке (на главной и тп). Дело в том, что я чайник и к тому же не знаю английского языка. У меня 2.7 Вп. Уже голову сломал, буду благодарен за ответ!

  35. # sonika 12.01.2009 в 00:45

    Никита, разве тут по-английски написано? :/

  36. # Никита (2) 15.01.2009 в 20:11

    По Русски. К сожалению кодекс на англ.
    Но Вы мне помогли на форуме, за что Вас очень сильно благодарю!

  37. # Дима (1) 02.07.2009 в 08:23

    Здравствуйте!
    Подскажите пожалуйста, как вывести текст перед постами на главной?
    Делаю следующее, в шаблон index перед строчками

    вставляю

    Но выводит некрасиво и виден этот код.

    Также пробовал вставлять

    Вывод текста

    В этом варианте текста вообще не видно.
    Помогите пожалуйста разобраться
    Спасибо заранее
    (Странно что при посте не видно самих кодов. Заменил в них некоторые буквы на кириллицу)

  38. # Halo 04.12.2009 в 12:56

    Здравствуйте.
    Сделал, как вы написали (использовал Custom Field Template). После этого на главной бесконечно дублировалась последняя запись.
    Прошу совета.

  39. # Halo 04.12.2009 в 13:11

    А всё, вроде сделал.
    Поставил query_posts('meta_key=homepage&meta_value=1');
    перед while (have_posts())

  40. # el.lock.notte (1) 04.12.2009 в 18:00

    Соника доброго дня.
    Пожайлуста, подскажите, уже голову сломал. Не получается ничего) У меня ВП 2.8.6 , поставил Плагин от Макса, чекбокс появился. А вот Изменяю Index.php, ничего не происходит. Тема не дефолтная,я не очень то разбираюсь в PHP) . Есть для вывода еще Page.php и Full-page.php . Содержание приблизительно одинаковое. Не могли бы вы подсказать, где и что делаю не так. Если ставлю Плагин от Ю.Б. то с главной все пропадают, а вот чекбокса нет )

  41. # Олег (11) 03.02.2010 в 01:36

    "Ю.Б. написал плагин On Home Page, который «всё сделает сам»." - на последней версии движка (на данный момент) плагин не работает. Да и очень плохо, что уже опубликованные статьи пришлось бы заново открывать, чтобы поставить галочку.

  42. # Дадон (1) 25.09.2010 в 10:46

    Да. Плагин что то не пашет. Новости с главной он убирает, а вот чекбокса при написании невидно.

  43. # west0293 (1) 25.02.2011 в 17:24

    Плагин не работает. Отмечаю галочками рубрики, но всё по-старому(((

  44. # Pingback Как работать с произвольными полями (custom fields) в WordPress? | Выживи сам 22.09.2015 в 18:26

    [...] Еще примеры циклов с использованием custom fields смотрите в статье «Чекбокс «Опубликовать на главной» [...]

  45. # Pingback Sonika’s blog. Ð’ основном про WordPress » Custom fields в WordPress — примеры продвинутого использоваР05.07.2016 в 22:49

    [...] Еще примеры циклов с использованием custom fields смотрите в статье «Чекбокс «Опубликовать на главной» [...]

Подписаться на фид.
RSS комментариев к этой записи. | TrackBack URI

Написать комментарий


Все саттелиты — в топку! Даже не сомневайтесь. Для вопросов о вордпресс не по теме поста есть два русскоязычных форума по wordpress.

[ ←Вернуться к стандартному виду ]

Печатная версия