El uso de get_adjacent_post
, previous_post_link
y next_post_link
solo parece reconocer elementos que son del mismo tipo de publicación. Como tengo 2 tipos de publicaciones personalizadas, ¿hay alguna forma de vincular todos los tipos de publicaciones anteriores y posteriores?Hacer que get_adjacent_post() funcione en los tipos de publicación personalizados
8
A
Respuesta
23
Parece que esta pregunta se ha realizado en todo el interweb sin una respuesta definitiva. Así que creé mi propia función desde el original get_adjacent_post
y la personalicé para cualquier otra persona que lo necesite.
La Función
gota esto en su functions.php
/*
* Replacement for get_adjacent_post()
*
* This supports only the custom post types you identify and does not
* look at categories anymore. This allows you to go from one custom post type
* to another which was not possible with the default get_adjacent_post().
* Orig: wp-includes/link-template.php
*
* @param string $direction: Can be either 'prev' or 'next'
* @param multi $post_types: Can be a string or an array of strings
*/
function mod_get_adjacent_post($direction = 'prev', $post_types = 'post') {
global $post, $wpdb;
if(empty($post)) return NULL;
if(!$post_types) return NULL;
if(is_array($post_types)){
$txt = '';
for($i = 0; $i <= count($post_types) - 1; $i++){
$txt .= "'".$post_types[$i]."'";
if($i != count($post_types) - 1) $txt .= ', ';
}
$post_types = $txt;
}
$current_post_date = $post->post_date;
$join = '';
$in_same_cat = FALSE;
$excluded_categories = '';
$adjacent = $direction == 'prev' ? 'previous' : 'next';
$op = $direction == 'prev' ? '<' : '>';
$order = $direction == 'prev' ? 'DESC' : 'ASC';
$join = apply_filters("get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories);
$where = apply_filters("get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type IN({$post_types}) AND p.post_status = 'publish'", $current_post_date), $in_same_cat, $excluded_categories);
$sort = apply_filters("get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1");
$query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort";
$query_key = 'adjacent_post_' . md5($query);
$result = wp_cache_get($query_key, 'counts');
if (false !== $result)
return $result;
$result = $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort");
if (null === $result)
$result = '';
wp_cache_set($query_key, $result, 'counts');
return $result;
}
Uso
Uso básico
// Custom post types can be array() or string
$post1 = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$post2 = mod_get_adjacent_post('next', 'custom2');
Para crear PREV/NEXT enlaces
<?php
$prev = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$next = mod_get_adjacent_post('next', array('post', 'custom1', 'custom2'));
?>
<?php if($prev) : ?>
<a href="<?php echo get_permalink($prev->ID)?>">« Go back in time</a>
<?php endif; ?>
<?php if($next) : ?>
<a href="<?php echo get_permalink($next->ID)?>">Next: <?php echo $next->post_title; ?> »</a>
<?php endif; ?>
Todavía se puede modificar el código si todavía desea incluir las variables $in_same_cat
y $excluded_categories
pero si lo hace, entonces le sugiero que utilice get_adjacent_post
lugar ya que eso es para lo que sirve.
Cuestiones relacionadas
- 1. Crear plantilla para tipos de publicación personalizados en Wordpress
- 2. cómo mostrar los datos personalizados de tipos de envíos personalizados
- 3. Categorías separadas para los tipos de publicación
- 4. Haskell: Derivado Mostrar de los tipos personalizados
- 5. ¿Cómo hacer que = NULL funcione en SQLite?
- 6. Cómo hacer que fitBounds tenga en cuenta los controles personalizados
- 7. ¿Cómo hacer que lxml funcione en IronPython?
- 8. ¿Cómo puedo hacer que funcione la compresión gzip en IIS7?
- 9. ¿Cómo hacer que XmlnsDefinition funcione en el ensamblado local?
- 10. ¿Se puede hacer que Intelligencia.UrlRewriter funcione en IIS7?
- 11. IIS Express: hacer que SSL funcione
- 12. No se puede hacer que Resque funcione
- 13. ¿Cómo puedo hacer que OData DELETE funcione?
- 14. Cómo hacer que CC-Tray funcione
- 15. ¿Cómo hacer que HTML5 funcione con DOMDocument?
- 16. ¿Cómo hacer que funcione APC (PHP Cache)?
- 17. Cómo hacer que funcione PREPARE TRANSACTION
- 18. ¿Cómo podemos hacer que kCAOnOrderOut funcione?
- 19. ¿Cómo hacer que file_get_contents() funcione con HTTPS?
- 20. ¿Cómo hacer que SVG funcione con IE?
- 21. ¿Mocking ChildProperty no puede hacer que funcione?
- 22. ¿Qué debo hacer para que Hash.from_xml() funcione?
- 23. ¿Cómo hacer que este javascript funcione?
- 24. ¿Cómo hacer que doxygen funcione más rápido?
- 25. Hacer que un miembro funcione como amigo
- 26. ¿Cómo puedo hacer que funcione este DataTrigger?
- 27. No sé cómo hacer que __slots__ funcione
- 28. ¿Cómo hacer que UpdatePanel dentro de ListView funcione?
- 29. cakephp: cómo hacer que NOW() funcione en condiciones de búsqueda?
- 30. ¿Crear tipos de mensajes personalizados en win32?
Muy bien hecho, gracias! Si se va a utilizar en cualquier tipo de página, se puede agregar fácilmente un tercer parámetro (en realidad, primero) $ post para pasar el tipo de publicación personalizado directamente a la función (no olvide eliminar la publicación $ global). – JosFabre
necesita una actualización para manejar la variable de cadena '$ post_type': if (is_array ($ post_types)) { $ txt = ''; for ($ i = 0; $ i <= count ($ post_types) - 1; $ i ++) { $ txt. = "'". $ Post_types [$ i]. "'"; if ($ i! = Count ($ post_types) - 1) $ txt. = ','; } $ post_types = $ txt; } else { \t $ post_types = "'" .trim ($ post_types, "'"). "'"; } – emc
¿cómo podemos modificar el código para que funcione en las publicaciones de la misma categoría? – CyberJunkie