2011-12-29 2 views
7

Как получить случайное сообщение в Wordpress?Получите случайное сообщение в Wordpress

Я хотел бы отобразить кнопку на странице, которая при нажатии переходит к случайному сообщению из блога. Я не хочу, чтобы на странице отображалась случайная запись, я просто хочу ссылку, которая ведет к этому сообщению. Я попытался найти код в Google и здесь, в stackoverflow, но не успел.

Спасибо ...

UPDATE:

Вот мой код шаблона:

<?php /*Template Name: Random*/ ?> 

<?php get_header(); ?> 

<nav><?php wp_nav_menu(array('menu' => 'Main Nav Menu')); ?></nav> 

<div id="main-content-archive"> 

<div class="grey-text">Random post</div> 

     <?php $query = new WP_Query(array ('orderby' => 'rand', 'posts_per_page' => '1'));?> 

     <?php if (have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); 
     echo '<li>'; 
     the_title(); 
     echo '</li>'; 
     ?> 

<?php endwhile; ?> 

<?php else : ?> 

    <h2>Not Found</h2> 

<?php endif; ?> 

</div> 
<?php get_sidebar(); ?> 
<?php get_footer(); ?> 
+0

Возможно, это может помочь вам: [случайный пост плагин] (http://wordpress.org/extend/plugins/random-posts-plugin/) – Cyclonecode

+0

Спасибо но я надеялся на простой код. Этот плагин не позволяет настраивать ссылку в том смысле, что я могу заменить список последних сообщений кнопкой. Любая другая идея? – rlesko

+0

@rlesko a) ** не использовать переменные, которые легко могут быть получены путем глобализации по ядру - не используйте «' $ query' "," $ post' "и т. Д. Вместо этого используйте, например. '$ myQuery' или что-то в этом роде ... –

ответ

5

Я нашел this пост, который дал мне желаемых результатов ...

Вот решение копировать/вставить с поста wpbeginner блога. Никакое нарушение авторских прав не предназначено.

Просто добавьте следующий код в файл functions.php:

add_action('init','random_add_rewrite'); 
function random_add_rewrite() { 
    global $wp; 
    $wp->add_query_var('random'); 
    add_rewrite_rule('random/?$', 'index.php?random=1', 'top'); 
} 

add_action('template_redirect','random_template'); 
function random_template() { 
    if (get_query_var('random') == 1) { 
      $posts = get_posts('post_type=post&orderby=rand&numberposts=1'); 
      foreach($posts as $post) { 
        $link = get_permalink($post); 
      } 
      wp_redirect($link,307); 
      exit; 
    } 
} 

Используйте mydomain.com/random/ как ваш href для вашей кнопки, что приводит к случайному сообщению.

Спасибо всем кто способствовал за вашу помощь ...

Приветствия!

+0

Это интересное решение, хотя и неправильное по дизайну - вы должны скорее исправить свой исходный код, так как это приводит к ненужному перенаправлению;) –

7

создать шаблон страницы, а также использовать следующий код, чтобы получить случайную запись:

//Create WordPress Query with 'orderby' set to 'rand' (Random) 
$the_query = new WP_Query(array ('orderby' => 'rand', 'posts_per_page' => '1')); 
// output the random post 
while ($the_query->have_posts()) : $the_query->the_post(); 
    echo '<li>'; 
    the_title(); 
    echo '</li>'; 
endwhile; 

// Reset Post Data 
wp_reset_postdata(); 

затем на странице, просто используйте:

<a href="the link to the page">see a random post</a> 
+1

Кажется, он не работает. Пожалуйста, проверьте обновление в вопросе. – rlesko

+0

@rlesko Может ли это быть липкой проблемой? Вы можете попробовать установить аргумент 'ignore_sticky_posts' в **' false' ** :) В противном случае у вас есть некоторые основные ошибки в вашем коде - я прокомментировал ваш вопрос;) –

+0

Не липкая проблема с сообщением, просто не совсем понятное, как это запрос работает. Orderby «rand» просто изменит порядок сообщений, которые были запрошены, и сообщив, что posts_per_page из 1 возвращает только один пост. Таким образом, он возвращает одно сообщение, затем рандомизирует порядок (он же всегда один и тот же пост). – clark

1

Проверить этот

<ul> 
<?php 
$args = array('numberposts' => 5, 'orderby' => 'rand'); 
$rand_posts = get_posts($args); 
foreach($rand_posts as $post) : ?> 
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 
<?php endforeach; ?> 
</ul> 
3

Я считаю, что это более полезно иметь URL, который будет перенаправлять на случайный пост, который вы можете использовать в качестве ссылки на боковой панели или в меню. Если это один сайт WP и даже на wp.com это очень легко, для блога на

http://mygroovywpsite.me/ 

Все, что вам нужно сделать, это добавить его? Случайным

http://mygroovywpsite.me/?random 

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

Сначала сделайте страницу сайта под названием «Random»/с слизняк «случайной» - это не нужно никакого содержания в нем

Затем создайте страницу-шаблон random.php

<?php 
/* 
Random Post Picker 
Use on page to send viewer to random post optionally mod query 
*/ 

// set arguments for WP_Query on published posts to get 1 at random 
$args = array(
    'post_type' => 'post', 
    'post_status' => 'publish', 
    'posts_per_page' => 1, 
    'orderby' => 'rand' 
); 

// It's time! Go someplace random 
$my_random_post = new WP_Query ($args); 

while ($my_random_post->have_posts()) { 
    $my_random_post->the_post(); 

    // redirect to the random post 
    wp_redirect (get_permalink()); 
    exit; 
} 
?> 

Затем вы получаете переадресацию на любую ссылку в своем блоге ...../random без какой-либо борьбы.Htaccess

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

у меня был только один сайт, который был проблемой, потому что хостинг подавлено использование запросов MySql с ORDER BY RAND()

+0

Работает как шарм. –

0

Другим простым решением для отображения Random Post

1.First создать пользовательскую страницу шаблон. Назовите его как случайный пост или имя по вашему выбору!

2.Open страницу и удалить петлю Wp по умолчанию и вставьте код, приведенный ниже

3.To не менять не почт изменить номер «1» на ваш выбор!

<?php 
query_posts(array('orderby' => 'rand', 'showposts' => 1)); 
if (have_posts()) : 
while (have_posts()) : the_post(); ?> 

<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1> 

<?php the_content(); ?> 

<?php endwhile; 

endif; ?> 

Источник: http://www.yengkokpam.com/displays-random-posts-in-a-page/

Смежные вопросы