function display_featured_image_shortcode($atts) {
global $post;
$default_atts = array(
'size' => 'large', // tamaño de imagen por defecto
'class' => 'custom-class', // clase CSS por defecto para la imagen
);
$atts = shortcode_atts($default_atts, $atts, 'featured_img');
if (has_post_thumbnail($post->ID)) {
$featured_image = get_the_post_thumbnail($post->ID, $atts['size'], array('class' => $atts['class']));
return $featured_image;
} else {
return ''; // devuelve una cadena vacía si no hay imagen destacada
}
}
add_shortcode('featured_img', 'display_featured_image_shortcode');
////////////////////// todos los servicios
function mostrar_servicios_personalizados($atts) {
// Obtener el ID de la publicación actual
$post_id = get_the_ID();
// Obtener los valores del campo personalizado
$servicios = get_post_meta($post_id, 'servicios_adicionales', true);
if (!$servicios) {
return '<p>No se encontraron servicios personalizados para esta publicación.</p>';
}
$cabeceras = [
"Internet",
"Aparcamiento",
"Cocina",
"Habitación",
"Baño",
"Zona de estar",
"Instalaciones de la habitación",
"Exteriores",
"Bienestar",
"Comida y bebida",
"Actividades",
"Vistas y exteriores",
"Características del edificio",
"Servicios de recepción",
"Servicios de limpieza",
"Instalaciones de negocios",
"Varios",
"Seguridad",
"Idiomas que se hablan",
"Bienestar",
"Servicios",
"General",
];
// Preparar el texto para evitar conflictos con las cabeceras que aparecen como ítems
foreach ($cabeceras as $cabecera) {
$servicios = preg_replace('/\| ?' . preg_quote($cabecera, '/') . ' ?\|/', '|', $servicios);
}
// Dividir el texto en bloques basados en las cabeceras
/* $bloques = preg_split('/(' . implode('|', array_map('preg_quote', $cabeceras, array_fill(0, count($cabeceras), '/'))) . '): /', $servicios, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);*/
// Dividir el texto en bloques basados en las cabeceras
// Dividir el texto en bloques basados en las cabeceras
// Dividir el texto en bloques basados en las cabeceras
$bloques = preg_split('/('.implode('|', array_map(function($cabecera) { return preg_quote($cabecera, '/'); }, $cabeceras)).')/', $servicios, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
ob_start();
?>
<style>
.servicios {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
grid-gap: 20px;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 20px;
}
.bloque {
padding: 10px;
border-bottom: 1px solid #ccc;
}
.cabecera {
font-weight: bold;
margin-bottom: 5px;
}
.items {
list-style-type: none;
margin: 0;
padding: 0;
}
.items li {
margin-bottom: 5px;
}
</style>
<div class="servicios">
<?php
// Lógica para procesar y mostrar los bloques y sus ítems
for ($i = 0; $i < count($bloques); $i += 2) {
$cabecera = trim($bloques[$i]);
$itemsTexto = isset($bloques[$i + 1]) ? $bloques[$i + 1] : '';
$items = explode('|', $itemsTexto);
?>
<div class="bloque">
<div class="cabecera"><?php echo $cabecera; ?></div>
<ul class="items">
<?php foreach ($items as $item) {
$item = trim($item);
if (!empty($item)) {
echo "<li>$item</li>";
}
} ?>
</ul>
</div>
<?php
}
?>
</div>
<?php
return ob_get_clean();
}
add_shortcode('todosservicios', 'mostrar_servicios_personalizados');
Copyright 2025 © Todos los derechos reservados | Tribu Remota
Menú
Clase muy interesante, he conseguido que se cargara la imagen pero no hay forma con los servicios, a seguir investigando para conseguirlo.