Cómo excluir categoría en enlace aleatorio de entrada única

  • Autor Autor Okaro
  • Fecha de inicio Fecha de inicio
Okaro

Okaro

Épsilon
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Saludos!!

En su día busqué por Google alguna manera de hacer un enlace para que al pulsar sobre él, el usuario tuviera una entrada aleatoria. Esto fue lo que implementé:

Insertar CODE, HTML o PHP:
add_action('init','random_post');function random_post() {
       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;
       }
}

Funciona Bien.

El caso es que he implementado una serie de entradas de un programa de afiliados, que no quiero que aparezcan al pulsar sobre el botón "random".

Todas las entradas las tengo en formato "Vídeo", y la de los artículos de afiliados en formato "estandard", con su propia categoría.

¿Hay alguna manera de modificar el código para excluir una categoría, o un formato de entrada?

Gracias de antemano. Un Saludo.
 
Hola,

Fijate acá: es:Etiquetas de plantilla/get posts « WordPress Codex

Esa es la función que está usando para obtener los posts.

Y, según creo, tendrías que agregar algo así como:

Insertar CODE, HTML o PHP:
               $posts = get_posts('post_type=post&orderby=rand&numberposts=1&category=-1');

En ese caso excluiría la categoría 1 (el signo "-" es para excluirla).

Hay que probar si anda... no está garantizado 😛

Saludos y suerte!
 
Última edición:
No, no me funciona. He excluido la categoría que tiene el 90% de las entradas y siguen saliendo.

En este caso la ID de la categoría es la número 6 así que para probar lo he dejado así:

Insertar CODE, HTML o PHP:
$posts = get_posts('post_type=post&orderby=rand&numberposts=1&category=-6');

Pero siguen saliendo igual.

Un Saludo.
 
[MENTION=49745]Okaro[/MENTION]

PHP:
add_action('init','random_post');
function random_post() {
       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=video&orderby=rand&numberposts=1');
               foreach($posts as $post) {
                       $link = get_permalink($post);
               }
               wp_redirect($link,307);
               exit;
       }
}
 
A ver, que creo que tengo un problema de cachés X-DD

Voy a vaciarlas y volver a probar.
 
Claro, con el tipo de post también podés 😀
 
Yo utilizo este pero es para pagina de peliculas tendrias que editar colores y tamaño

Insertar CODE, HTML o PHP:
<!-- empieza bloque aleatorios-->
    <div id="cuadrosidebar">
      <div class="news-block-header">
        <div class="news-block-header-bg">
          <img src="http://3.bp.blogspot.com/-_wheyWnfkCY/U4SHw5vbH7I/AAAAAAAAGKM/K8BMAxwHUP8/s1600/peliculas.png" width="26" height="26" style="float:left;margin-top: 10px;padding-right:15px"/>
          <div class="titlesidebar">
           Películas al azar
          </div>
          <span class="subtitlesidebar">
            Selecciona tu favorita 
          </span>
        </div>
      </div>
      <div class="clear">
      </div>
      <div class="clear">
      </div>
      <div style="width:220px;padding-left: 20px;">
   <table>
     <?php $rand_posts = get_posts('numberposts=5&orderby=rand');
 foreach( $rand_posts as $post ) :
 ?>
    <?php if (!in_category(1)):?>

<div style="padding-top:8px;border-bottom:1px solid #444d6a;color:#fff;">  
<div style="float:left;padding-right:15px;">
<a href="<?php the_permalink() ?>">                  
<?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );?>        
<img src="<?php echo $url; ?>" width="95px" height="125px" style="border: 2px solid #999;" title="<?php the_title(); ?>"/>                 
</a>
</div>
<div><a style="text-decoration:none;color:#fff;font-weight:bold;font-size:14px" href="<?php the_permalink() ?>"><?php the_title(); ?></a><br/>
<?php the_time('j \d\e\ F \d\e\l\ Y') ?>
<br/><br/><br/><br/><br/><br/><br/><br/><br/></div></div>
           <?php endif; ?>
 
<?php wp_reset_query(); ?>   
 <?php endforeach; ?>
      </table>

  </div>
      <br/>
   
  </div>
    <br/>
    <br/>
<!-- termina bloque aleatorios-->

donde lo que está en negrita se añade para excluir a los posts con id de categoría 1

Para saber el id de categoría puedes ir a tu panel de wordpress y debajo de la pestaña de entradas está una subpestaña de categorías, ingresas y al darle click a la categoría que deseas que no salga saldrá algo así

...wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=1&post_type=post

en el ejemplo anterior el id de esa categoría es 1 por lo que debes cambiar ese número por tu categoría.

Yo este codigo lo puse en mi pagina para excluir la categoria Eroticas y funciona muy bien
 
Última edición:
Lo que el intenta terminar de implementar, es un botón que lo lleve a un post aleatorio.

Yo utilizo este pero es para pagina de peliculas tendrias que editar colores y tamaño

Insertar CODE, HTML o PHP:
<!-- empieza bloque aleatorios-->
    <div id="cuadrosidebar">
      <div class="news-block-header">
        <div class="news-block-header-bg">
          <img src="http://3.bp.blogspot.com/-_wheyWnfkCY/U4SHw5vbH7I/AAAAAAAAGKM/K8BMAxwHUP8/s1600/peliculas.png" width="26" height="26" style="float:left;margin-top: 10px;padding-right:15px"/>
          <div class="titlesidebar">
           Películas al azar
          </div>
          <span class="subtitlesidebar">
            Selecciona tu favorita 
          </span>
        </div>
      </div>
      <div class="clear">
      </div>
      <div class="clear">
      </div>
      <div style="width:220px;padding-left: 20px;">
   <table>
     <?php $rand_posts = get_posts('numberposts=5&orderby=rand');
 foreach( $rand_posts as $post ) :
 ?>
    <?php if (!in_category(1)):?>

<div style="padding-top:8px;border-bottom:1px solid #444d6a;color:#fff;">  
<div style="float:left;padding-right:15px;">
<a rel="nofollow" href="<?php the_permalink() ?>">                  
<?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );?>        
<img src="<?php echo $url; ?>" width="95px" height="125px" style="border: 2px solid #999;" title="<?php the_title(); ?>"/>                 
</a>
</div>
<div><a rel="nofollow" style="text-decoration:none;color:#fff;font-weight:bold;font-size:14px" href="<?php the_permalink() ?>"><?php the_title(); ?></a><br/>
<?php the_time('j \d\e\ F \d\e\l\ Y') ?>
<br/><br/><br/><br/><br/><br/><br/><br/><br/></div></div>
           <?php endif; ?>
 
<?php wp_reset_query(); ?>   
 <?php endforeach; ?>
      </table>

  </div>
      <br/>
   
  </div>
    <br/>
    <br/>
<!-- termina bloque aleatorios-->

donde lo que está en negrita se añade para excluir a los posts con id de categoría 1

Para saber el id de categoría puedes ir a tu panel de wordpress y debajo de la pestaña de entradas está una subpestaña de categorías, ingresas y al darle click a la categoría que deseas que no salga saldrá algo así

...wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=1&post_type=post

en el ejemplo anterior el id de esa categoría es 1 por lo que debes cambiar ese número por tu categoría.

Yo este codigo lo puse en mi pagina para excluir la categoria Eroticas y funciona muy bien
 
Muchas gracias a todos!!

Al final como dijo [MENTION=18661]Lopezito[/MENTION] me es perfecto, ya que así me salen solo las entradas con vídeos que es lo que neceisto!!

Un Saludo.
 
Atrás
Arriba