Hola estoy intentando pintar noticias desde una página externa en la mía (ambos dominios son de mi propiedad y están alojados con vosotros), el caso es que he seguido vuestro artículo https://www.webempresa.com/blog/pintar-entradas-en-wordpress-desde-api.html y desde el blog de TED me funciona todo correctamente y desde el el que me los quiero traer (bedatascience.com) me trae el título y la fecha, pero las imágenes y las categorías los deja en blanco.
Podéis verlo en https://mkt.panelemprende.com/post-api-rest/ .
He intentado de todo...Incluso he instalado un plugin que me genera la imagen destacada en posts para poder llamarla directamente sin pasar por medios y tampoco funciona.
¿Podéis arrojarme un poco de luz sobre ésto?
Muchas Gracias
Contenido solo visible a usuarios registrados
Hola Lucia,
Envianos algunas capturas como estas creando las configuraciones en tu sitio web sobre la API rest para mostrar los artículos, de esta forma podemos revisarlo con mayor detalle.
Un Saludo
Hola @karen , te cuento...
En el code snippet he puesto ésto
FOTO 1
En el constructor de divi se ve así
FOTO 2
En la web es esta https://mkt.panelemprende.com/post-api-rest/ a veces sale otras no...
Hola Lucia,
Revisa hacer la siguiente variación a tu código y comprueba como se muestra:
/**
* Muestra las 4 últimas noticias de una web WordPress
*/
function get_4_posts_wordpress_api() {
$html = '';
// Hace una peticion a la url pasada, si quieres pintar 10 noticias, quita esto --> ?per_page=4
$posts_request = wp_remote_get('https://bedatascience.com/wp-json/wp/v2/posts?per_page=4');
// Si hay error en la petición, sale
if (is_wp_error($posts_request)) {
return;
}
// Obtenemos los posts.
$posts = json_decode(wp_remote_retrieve_body($posts_request));
// Si hay información, la pintamos
if (!empty($posts)) {
$html = '<div class="news-container" style="display:grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)">';
// Vamos a obtener la información por cada noticia.
foreach ($posts as $post) {
$id = $post->id;
$response = wp_remote_get( 'https://bedatascience.com/wp-json/wp/v2/posts/'.$id );
$data = json_decode( wp_remote_retrieve_body( $response ) );
// Obtenemos la imagen
$featured_media_id = $data->featured_media;
$image = wp_remote_get( 'https://bedatascience.com/wp-json/wp/v2/media/'.$featured_media_id );
$image_data = json_decode( wp_remote_retrieve_body( $image ) );
$image_url = $image_data->source_url;
// Obtenemos las categorías
$categories = wp_remote_get( 'https://bedatascience.com/wp-json/wp/v2/categories?post='.$id );
$categories_data = json_decode( wp_remote_retrieve_body( $categories ) );
$categories_name = '';
foreach ($categories_data as $category) {
$categories_name .= $category->name;
$categories_name .= ', ';
}
$categories_name = substr($categories_name, 0, -2); //Quitamos la última coma
// Fecha de la noticia
$date = date( 'j/n/Y', strtotime( $post->modified ) );
// Pintamos la información.
$html .= '<div class="blog-notice" style="padding:20px 10px;">
<div style="background-color:white;box-shadow: 0px 60px 70px -20px #e6e6e6;padding:10px 10px;" class="detail-notice">
<a href="' . esc_url( $post->link ) . '" target=\"_blank\"><img class="lazyload" decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-orig-src="' . $image_url .'"></a>
<div style="margin-top:10px;margin-bottom:10px;"><span style="font-weight:bold;text-transform:uppercase;font-size:0.8rem;" "category-notice">'. esc_html($categories_name) . '</span></div>
<a style="font-size:1.1rem;line-height:1.1rem;font-weight:bold;margin-top:20px;" href="' . esc_url( $post->link ) . '" target=\"_blank\">' . esc_html( $post->title->rendered ) . '</a>
<br/> ' . esc_html( $date ) . '
</div>
</div>';
}// fin foreach
$html .= '</div>';
}
return $html;
}
// Registramos el shortcode "shortcode_ultimas_noticias" para que al usarlo, llame a la función get_4_posts_wordpress_api
add_shortcode( 'ultimas_noticiasBDS', 'get_4_posts_wordpress_api' );
No veo ningún error adicional a tu código, por lo que debes revisar la API de tu WordPress donde importar las entradas.
Un Saludo
@karen Hola de nuevo, he probado el código que me enviaste y el resultado es parecido, con sombra en las cajas, pero las categorías y las img no salen, es como si solo tuviera acceso a JSON posts y no al de medios ni categories...
Hola Lucia.
Veo que se muestran las imágenes, no se si llegaste a solucionarlo:
Si llegaste a solucionarlo, por favor serias tan amable de compartir la solucion y asi ayudamos también a otros usuarios que puedan tener el mismo problema ?
Un Saludo
@pepesoler Hola Pepe, estoy en ello, por eso todavía no puse nada.
Las imágenes si consigo mostrarlas, pero utilizando otro tipo de solución. En la página de origen (bedatascience.com) instalé un plugin llamado REST API Featured Image que lo que hace es generar un campo featured_media_src_url en el https://bedatascience.com/wp-json/wp/v2/posts con la ruta de la imagen, y desde ahí ya me lo traigo. A mi me vale pero si no tienes acceso a la página dde origen no funcionaría.
Por otro lado estoy intentando traer las categorías, pero no acepta 2 llamadas get a la vez (es mi teoría) o tarda demasiado tiempo en ejecutarlas y por eso da error... no sé. El caso es que en cuanto pones dos llamadas se ralentiza todo mucho y la segunda no recupera ningún dato.
Como tengo Yoast SEO en el post me lo pinta así
"yoast_head_json":{
"title": "Cómo sacar más potencial a tu Data Warehouse con IA - BeDataScience",
"description": "Si quieres ir un paso más allá en Business Intelligence con Data Warehouse, añade el potencial de la IA en tu negocio. Mira cómo.",
"robots": {},"canonical": " https://bedatascience.com/blog/data-warehouse-ia/ ",
"og_locale": "es_ES","og_type": "article","og_title": "Cómo sacar más potencial a tu Data Warehouse con IA - BeDataScience","og_description": "Si quieres ir un paso más allá en Business Intelligence con Data Warehouse, añade el potencial de la IA en tu negocio. Mira cómo.","og_url": " https://bedatascience.com/blog/data-warehouse-ia/ ","og_site_name": "BeDataScience","article_published_time": "2023-11-23T13:46:02+00:00","article_modified_time": "2023-11-23T13:48:27+00:00","og_image": [],"author": "Panel2","twitter_card": "summary_large_image","twitter_misc": {"Escrito por": "Panel2","Tiempo de lectura": "3 minutos"},
"schema": {
"@context": " https://schema.org ",
"@graph": [
{"@type": "Article",
"@id": " https://bedatascience.com/blog/data-warehouse-ia/#article ",
"isPartOf": {"@id": " https://bedatascience.com/blog/data-warehouse-ia/ "},
"author": {"name": "Panel2","@id": " https://bedatascience.com/#/schema/person/b5833093803b7f38940801eac53e7bd5 "},
"headline": "Cómo sacar más potencial a tu Data Warehouse con IA",
"articleSection": ["Big Data","Customer Experience","IA","Marketing"],
Si consigo traerme articleSection podría pintar las categorías... Pero mis limitados conocimientos de PHP y JSON me impiden recuperar mas allá de @graph así que, de momento no puedo pintarlas (no es bloqueante) ...Si avanazo algo os lo pondré (cualquier ayuda o aporte es bienvenido, por suepuesto...jejeje)
De momento, esto es todo. Un saludo
Hola Lucia,
¿Cuál es el error que se muestra con las dos llamadas que mencionas? De momento veo que ya se muestran las imágenes y acceso directo al post, ¿no sé que tan relevante sea mostrar las categorías en este punto?
Coméntanos más detalles sobre ello y coméntanos si podemos dar el tema como solucionado.
Un Saludo
@karen error no me da o no se donde mirarlo, simplemente no accede y no muestra datos, deja en blanco los datos a mostrar, por eso se veía el título el enlace al post y la fecha... Lo de las categorías, llegados a este punto me da igual, ya era por orgullo pèrsonal... Lo he comentado por si a alguien le sirve en el foro o puede aportar luz.
Por otro lado, podéis cerrarlo, pero como os digo sin el plugin en el blog de origen no podría traerme las imágenes. Solucionado a medias, pero sí podéis cerrarlo
Hola Lucia,
De acuerdo, es un placer para nosotros siempre poder ayudarte.
Muchas gracias por la aportación, estoy segura de que será útil para alguien que presente el mismo inconveniente.
No dudes en escribirnos si tienes cualquier otra consulta.
Un Saludo 😊