cómo obtener las publicaciones anteriores y siguientes en la api de wordpress de publicación única, no puedo obtener esto, cómo hacer json anterior y siguiente como en wordpress sin API quiero obtener publicaciones de slug que puedo usar siguiente anterior en publicación única, cómo obtener slug, enlace o publicación de identificación para el siguiente y el anterior
<?php
$prev_post = get_previous_post();
if (!empty( $prev_post )): ?>
<a href="https://stackoverflow.com/questions/42546957/<?php echo $prev_post->guid ?>"><?php echo $prev_post->post_title ?></a>
<?php endif ?>
como este pero uso en json https://codex.wordpress.org/Function_Reference/previous_post_link
Un poco tarde para la fiesta, pero aquí hay una respuesta.
Si bien estoy de acuerdo con la respuesta de @Chris de que una API REST es diferente de la API PHP disponible para temas, a veces aún construimos las mismas interfaces a partir de los datos, ¿verdad?
Si quiero mostrar enlaces en mi blog a la publicación siguiente y anterior, no quiero enviar 3 solicitudes a la API.
Como solución, incluí esto en mi complemento que contiene los ajustes de API para el proyecto específico:
// Add filter to respond with next and previous post in post response.
add_filter( 'rest_prepare_post', function( $response, $post, $request ) {
// Only do this for single post requests.
if( $request->get_param('per_page') === 1 ) {
global $post;
// Get the so-called next post.
$next = get_adjacent_post( false, '', false );
// Get the so-called previous post.
$previous = get_adjacent_post( false, '', true );
// Format them a bit and only send id and slug (or null, if there is no next/previous post).
$response->data['next'] = ( is_a( $next, 'WP_Post') ) ? array( "id" => $next->ID, "slug" => $next->post_name ) : null;
$response->data['previous'] = ( is_a( $previous, 'WP_Post') ) ? array( "id" => $previous->ID, "slug" => $previous->post_name ) : null;
}
return $response;
}, 10, 3 );
Lo que te da algo como esto:
[
{
"ID": 123,
...
"next": {
"id": 212,
"slug": "ea-quia-fuga-sit-blanditiis"
},
"previous": {
"id": 171,
"slug": "blanditiis-sed-id-assumenda"
},
...
}
]
Estoy 99% seguro de que la API de WordPress no ofrece esto, ya que tiene poco sentido en un entorno de “Resto”.
Muchas de las funciones antiguas de WordPress tienen como objetivo hacer la vida más fácil (como enlace_entrada_anterior) y pueden funcionar a) haciendo suposiciones (está creando un blog con las publicaciones enumeradas en orden) y b) creando su propia especificación.
Al introducir Rest (y poder afirmar que es Rest-ish) no tendría mucho sentido hacer referencia al elemento anterior/siguiente a menos que se defina específicamente como una relación. Por ejemplo, tiene sentido que un extremo de descanso de “avión” escuche a los pasajeros como una relación: /api/planes/f0556/passengers
pero no tendría sentido tener el vuelo siguiente/anterior porque el contexto podría cambiar (¿es el próximo vuelo el que sale? ¿el que llega?).
En su lugar, tendría que consultar el /api/planes/
(índice) punto final para obtener todos los vuelos a ambos lados de este y seleccionar lo que necesita.
Estaba enfrentando el mismo problema. No pude modificar las funciones de wordpress.php, así que tuve que crear una solución con la API REST.
La clave era obtener la identificación de la publicación raíz y obtener la publicación que se publicó justo después o antes de esta publicación raíz.
Aquí está mi solución:
public function getAdjacentPost(Post $post, string $direction = WordPressApi::ADJACENT_RIGHT): ?Post
{
//$dateEdge = $post->getCreatedAt()->format(\DateTimeInterface::ISO8601);
$dateEdge = $post->getCreatedAt()->format('Y-m-d H:i:s');
$query = [
'exclude' => $post->id,
'per_page' => 1,
'orderby' => 'date',
];
switch ($direction) {
case WordPressApi::ADJACENT_RIGHT:
$query['order'] = 'asc';
$query['after'] = $dateEdge;
break;
case WordPressApi::ADJACENT_LEFT:
$query['order'] = 'desc';
$query['before'] = $dateEdge;
break;
default:
throw new \InvalidArgumentException(sprintf('Invalid direction: %s!', $direction));
}
$posts = $this->client->requestArray('posts', $query);
return count($posts) === 0
? null
: new Post($posts[0]);
}
¿Alguna suerte? Estoy en el mismo barco aquí.
– Jonca33
25/09/2017 a las 15:53