2011-12-29 17 views
7

Jak uzyskać losowy wpis w Wordpress?Uzyskaj losowy post w Wordpressie

Chciałbym wyświetlić przycisk na stronie, która po naciśnięciu przechodzi do losowego postu z bloga. Nie chcę, aby losowy post był wyświetlany na stronie, chcę tylko link, który prowadzi do tego posta. Próbowałem wyszukać kod w Google i tutaj na stackoverflow, ale bez powodzenia.

Dzięki ...

UPDATE:

Oto mój kod szablonu:

<?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

Być może to pomóc: [random plugin post] (http://wordpress.org/extend/plugins/random-posts-plugin/) – Cyclonecode

+0

Dzięki ale miałem nadzieję na prosty kod. Ta wtyczka nie pozwala na personalizację linku w tym sensie, że mogę zastąpić listę ostatnich wpisów przyciskiem. Każdy inny pomysł? – rlesko

+0

@rlesko a) ** nie używaj ** zmiennych, które mogą być łatwo zglobalizowane przez rdzeń - nie używaj "' $ query' "," '$ post'" itp. ... Zamiast tego użyj np. '$ myQuery' lub coś takiego ... –

Odpowiedz

5

znalazłem this słupek, który dał mi pożądanych wyników ...

Oto rozwiązanie kopia/wklejony ze stanowiska wpbeginner blogu. Brak zamierzonego naruszenia praw autorskich.

Wystarczy dodać następujący kod do pliku 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; 
    } 
} 

Zastosowanie mydomain.com/random/ jako swój href dla przycisku, który prowadzi do losowego postu.

Dziękujemy wszystkim, którzy przyczynili się do pomocy ...

Cheers!

+0

To interesujące rozwiązanie, chociaż jest błędne z założenia - powinieneś raczej naprawić swój oryginalny kod, ponieważ spowoduje to niepotrzebne przekierowanie;) –

7

utworzyć szablon strony i użyć następującego kodu, aby uzyskać losowy wpis:

//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(); 

następnie na stronie, po prostu użyj:

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

Wygląda na to, że nie działa. Sprawdź aktualizację w pytaniu. – rlesko

+0

@rlesko Czy to może być problem z postem? Możesz spróbować ustawić argument 'ignore_sticky_posts' na **' false' ** :) W przeciwnym razie masz poważne błędy w swoim kodzie - skomentowałem twoje pytanie;) –

+0

To nie jest przyklejony post, nie całkiem rozumiem, jak to zapytanie działa. Zamówienie "rand" zmieni po prostu kolejność postów, które zostały zapytane, i powiedzenie mu posts_per_page of 1 spowoduje tylko jeden post. Zwraca więc jeden post, a następnie losuje kolejność (również zawsze ten sam wpis). – clark

1

sprawdzić ten

<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

uważam, że jest bardziej użyteczny mieć adres URL, który odsyła do losowej postu, które można wykorzystać jako link w pasku bocznym lub w menu. Jeśli jest to pojedyncza strona WP, a nawet na wp.com to naprawdę łatwe do bloga na

http://mygroovywpsite.me/ 

Wszystko, co musisz zrobić, to dołączyć go? Losowo

http://mygroovywpsite.me/?random 

Znalazłem to zrobił nie działa (ani kod wp_beginner powyżej) na podwitrynach w mojej instalacji na wielu serwerach, albo podejście właśnie załadowało stronę główną. Może miałem kilka ostrych problemów z pamięcią podręczną. Sposób, w jaki robię to w wielu witrynach, to kilka dodatkowych kroków bez wtyczek.

Najpierw sprawdź stronę w miejscu zwanym „Random”/z ślimak „losowo” - nie potrzeba żadnych treści w nim

Następnie należy utworzyć szablon strony-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; 
} 
?> 

Następnie otrzymasz ponowne przekierowanie do dowolnego linku na swoim blogu ...../losowo bez żadnego zapaśnictwa..htaccess

Zrobiłem to w ten sposób, ponieważ miałem zmodyfikować zapytanie, czasami dla niestandardowego typu post, czasami ograniczyć do kategorii itp

miałem tylko jedno miejsce, które było problemem, ponieważ hosting tłumione stosowanie zapytań mySQL z ORDER bY RAND()

+0

Działa jak urok. –

0

Innym prostym rozwiązaniem, aby wyświetlić losowe posta

1.First a utwórz stronę niestandardowego szablonu. Nazwij go jako losowy post lub dowolną nazwę!

2.Open strony i usunąć domyślną pętlę wp i wkleić poniższy kod

3.To zmienić nie od słupka zmienić numer „1” do wyboru!

<?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; ?> 

źródło: http://www.yengkokpam.com/displays-random-posts-in-a-page/