|
|
|
| В общем мне нужно так чтобы каждый день выбиралась случайная статья и была на сайте весь день, а на следующий день выбиралась другая статья и т.д.
Помогите пожалуйста в этом вопросе !!!
как я понимаю нужно что-то типа этого:
проверить, есть ли кука
Нет -> выбрать случайную статью. -> создать куку с ид статьи
Да -> выбрать статью по ид из куки.
но как это реализовать на php понятия не имею, помогите пожалуйста!!!
P.S. вот мой сайт nobad - news . com (без пробелов), а скрипт хочу применить к случайным записям правее слайдера. | |
|
|
|
|
|
|
|
для: nobad-news
(26.10.2013 в 15:08)
| | Прочитайте про CRON.
[Модератор] Не нужно безосновательно отсылать форумчан к ману, да еще и не разобравшись что ТС конкретно хочет. Хотите помочь - задайте наводящие вопросы или выясните что спрашивающий не договорил. | |
|
|
|
|
|
|
|
для: ZetRider
(27.10.2013 в 17:43)
| | спасибо, посмотрел, но вот все таки хочется что-нибудь попроще или дайте какую-нибудь информацию поточнее, а то в описании про крон все его функции кратко описываются. | |
|
|
|
|
|
|
|
для: nobad-news
(27.10.2013 в 19:31)
| | > как я понимаю нужно что-то типа этого:
> проверить, есть ли кука
> Нет -> выбрать случайную статью. -> создать куку с ид статьи
> Да -> выбрать статью по ид из куки.
> но как это реализовать на php понятия не имею, помогите пожалуйста!!!
Вы хотите одну случайную статью в целом для всего сайта? Если так, то куки тут не при чем.
Или одну случайную статью, для каждого пользователя свою? Тогда логика нормальная. | |
|
|
|
|
|
|
|
для: nobad-news
(27.10.2013 в 19:31)
| | Если делать при помощи куки, то у все пользователей всегда будут отображаться разные записи. Если нужно отображать одну случайную запись одинаково у всех, то записываем ID в бд и отображаем.
Данные из БД заранее закешированы самим WP поэтому запрос вида
$last_update_date = get_option('one_entry_per_day');
не создает дополнительных запросов.
Если без крона, только средствами WP предлагаю два варианта вывода:
1 как виджет (код вставить в файл активной темы functions.php)
<?php
class Sidebar_one_entry_per_day_Widget extends WP_Widget {
function Sidebar_one_entry_per_day_Widget() { parent::WP_Widget(false, $name = 'Одна запись каждый день'); }
function widget($args, $instance) {
extract( $args );
$last_update_date = get_option('one_entry_per_day');
if($last_update_date == '' OR $last_update_date < date('Y-m-d'))
{
$args = array(
'category' => intval($instance['category']),
'orderby' => 'rand',
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '1'
);
}
else
{
$args = array(
'p' => get_option('one_entry_id')
);
}
echo $before_widget;
if($instance['title'] != '')
{
echo $before_title;
echo $instance['title'];
echo $after_title;
}
$posts = get_posts($args);
foreach( $posts as $post ){
setup_postdata($post);
$last_update_date = get_option('one_entry_per_day');
if($last_update_date == '' OR $last_update_date < date('Y-m-d'))
{
update_option('one_entry_per_day', date('Y-m-d'));
update_option('one_entry_id', get_the_ID());
}
?>
<div class="post">
<a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<br>
<?php the_excerpt(); ?>
</div>
<?php
}
wp_reset_postdata();
echo $after_widget;
}
function update($new_instance, $old_instance) { return $new_instance; }
function form($instance) {
$title = esc_attr($instance['title']);
$category = esc_attr($instance['category']);
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>">Заголовок
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id('category'); ?>">ID категории
<input class="widefat" id="<?php echo $this->get_field_id('category'); ?>" name="<?php echo $this->get_field_name('category'); ?>" type="text" value="<?php echo $category; ?>" />
</label>
</p>
<?php
}
}
add_action('widgets_init', create_function('', 'return register_widget("Sidebar_one_entry_per_day_Widget");'));
?>
|
2 вариант просто вставка кода в шаблон файлов сайта:
<?php
$last_update_date = get_option('one_entry_per_day');
if($last_update_date == '' OR $last_update_date < date('Y-m-d'))
{
$args = array(
'category' => 123, /* ID категории */
'orderby' => 'rand',
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '1'
);
}
else
{
$args = array(
'p' => get_option('one_entry_id')
);
}
$posts = get_posts($args);
foreach( $posts as $post ){
setup_postdata($post);
if($last_update_date == '' OR $last_update_date < date('Y-m-d'))
{
update_option('one_entry_per_day', date('Y-m-d'));
update_option('one_entry_id', get_the_ID());
}
?>
<div class="post">
<a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<br>
<?php the_excerpt(); ?>
</div>
<?php
}
wp_reset_postdata();
?>
|
p.s. Модератор - ок. | |
|
|
|
|
|
|
|
для: ZetRider
(28.10.2013 в 09:24)
| | спасибо большое за код, теперь наконец то разобрался!!!+++))) | |
|
|
|
|
|
|
|
для: ZetRider
(28.10.2013 в 09:24)
| | К сожалению, тут же сразу появился вопрос.
А как сделать так чтобы эта случайная запись выводилась на главной странице сверху в углу ссылкой (код мне нужно вставить в index.php) и не мешала выводу основных записей (т.е. последних). А то какая-то абра кадабра получается - какая запись выбирается кодом, та на главной и стоит.
Подскажите пожалуйста !!!)))
P.S. надеюсь я понятно оъбяснил))) | |
|
|
|