Imagen distinta según día y hora del servidor

<div class="threadpost col-7"><div class="post">

Hola, quiero hacer en mi web, un tipo widget o modulo en PHP para wordpress con una imagen fija, que según la hora y día cambie.

ejemplo:


día lunes- 12 hs a 13 hs = .imagen01.jpg
día lunes- 13 hs a 16 hs = .imagen02.jpg
día lunes- 16 hs a 20 hs = .imagen03.jpg
día lunes- 20 hs a 00 hs = .imagen04.jpg

día sábado- 06 hs a 14 hs = .imagen07.jpg
día sábado- 14 hs a 29 hs = .imagen08.jpg

Rotación por HORA Y DÍA (Lunes, Viernes, Sábado y Domingos) y así sucesivamente necesito rotar esas imágenes SEGÚN LA HORA DEL SERVIDOR y no la hora de la PC del usuario (eso ya lo se) Espero ayuda, gracias.

</div></div>

1 Respuesta

Respuesta

Lo que se podría hacer es alimentarse de la función date de php, la cual obtiene la fecha y hora desde el servidor.

Nativamente php no puede obtener la hora y fecha desde el cliente ya que está en una capa a la cual no puede acceder. Php se ejecuta en el servidor y lenguajes como javascript en el cliente.

Se me ocurre un método simple que no se si llegue a ser un plugin o módulo de ningún cms pero quizá te ayude.

function getImagen(){
//Haremos un array con las rutas de las imagenes y un índice numérico
$arr_rutas = array();
//cargaremos las rutas... tu coloca las que correspondan
$arr_rutas[0] = "/imagenes/imagen1.jpg";
$arr_rutas[1] = "/imagenes/imagen2.jpg";
$arr_rutas[2] = "/imagenes/imagen3.jpg";
$arr_rutas[3] = "/imagenes/imagen4.jpg";
$arr_rutas[4] = "/imagenes/imagen5.jpg";
$arr_rutas[5] = "/imagenes/imagen6.jpg";
//Ahora hay que preparar la lógica que hará que estas imágenes aparezcan 
//durante cierto ciclo de tiempo
//usaremos la funcion date para detectar que día de la semana es
switch(date("N")){
 //1 es lunes
 case "1":
 //pregunto por la hora, si está entre 12 y 13
 if(date("H")=="12"){
 return $arr_rutas[0];
 }elseif(date("H") > 12 && date("H")< 16){
 return $arr_rutas[1];
 }elseif(date("H") > 15 && date("H")< 20){
 return $arr_rutas[3];
 }elseif(date("H") > 19 && date("H")<= 23){
 return $arr_rutas[4];
 }
 break;
 //6 es sabado
 case "6":
 //pregunto por la hora, si está entre 12 y 13
 if(date("H") >= 6 && date("H")< 14){
 return $arr_rutas[5];
 }elseif(date("H") > 15 && date("H")< 19){
 return $arr_rutas[6];
 }
 break;
}
}
//en tu html haz lo siguiente
<img src="<?php echo getImagen(); ?>" alt="imagen">

Con esta lógica podrías tener algo que pueda generar el funcionamiento que esperas.

Mmmm mucho no le entendí, te explico antes usaba joomla, hará un par de meses empece con esto de wordpress porque según dicen es mejor y mas estable menos hackeable ettc ettc, en joomla si pude lograr lo que quiero, un modulo que según el día y hora del SERVIDOR rotara imágenes según la hora y el día, aquí abajo te paso el código remodelado de ese modulo a ver si se puede adaptar en un widget de wordpress, espero.Saludos y muchas gracias por la ayuda.

CÓDIGO MODULO JOOMLA 1.5

<?php
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );
global $mosConfig_absolute_path, $mosConfig_live_site;
$type = $params->get( 'type', 'jpg' );
$folder = $params->get( 'folder' ); /*En esta linea (supongo) que carga la ruta de las imágenes
que tu has incluido un paso antes, en el administrador de joomla
supongo... nunca he usado joomla
Borra esa línea y pones aquí a ver si funciona,
no estaría demás que hicieras un echo $folder;
para ver que contiene la variable*/
$día = date(w);
if ($día==0) //es domingo;
$folder = './prog2/';
elseif ($día==6) //es sábado
$folder = './prog3/';
elseif ($día==5) //es sábado
$folder = './prog4/';
else //es entre semana
$folder = './prog1/';
/* las rutas dependen de donde tengas las imágenes,
por eso es mejor que antes de nada veas que contiene $folder*/
$link = $params->get( 'link' , '#');
$width = $params->get( 'width' );
$height = $params->get( 'height' );
$class_sfx = $params->get( 'moduleclass_sfx' );
$the_array = array();
$the_image = array();
// if folder includes livesite info, remove
if ( strpos($folder, $mosConfig_live_site) === 0 ) {
$folder = str_replace( $mosConfig_live_site, '', $folder );
}
// if folder includes absolute path, remove
if ( strpos($folder, $mosConfig_absolute_path) === 0 ) {
$folder= str_replace( $mosConfig_absolute_path, '', $folder );
}
// if folder doesnt contain slash to start, add
if ( strpos($folder, '/') !== 0 ) {
$folder = '/'. $folder;
}
// construct absolute path to directory
$abspath_folder = $mosConfig_absolute_path . $folder;
// check if directory exists
if (is_dir($abspath_folder) && $files=glob($abspath_folder.'*')) {
$current_time = date('Hi', time());
if( !empty($files)) {
foreach( $files as $f ){
$m = array();
$r = preg_match('/([0-9]{4})\-([0-9]{4})/',basename($f),$m);
#echo $m[1].'-'.$m[2].' - '.($m[1]<=$current_time).'- '.( $m[2]>=$current_time).'- '.$folder.basename($f).'<hr>';
if( !empty($m) && !empty($m[1]) && !empty($m[2]) && $m[1]<=$current_time && $m[2]>=$current_time ){
printf("<div class=\"moduletable%s\"><a href=\"%s\" ><img src=\"%s\" width=\"%s\" alt=\"image\" height=\"%s\"</div> ",
$class_sfx,
$link,
$mosConfig_live_site.$folder.basename($f),
$width,
$height
);
}
}
#var_dump('<pre>',$files,'</pre>');
}
}
?>

PD: como puedo adaptar esto al wordpress? antes tenia 4 carpetas; llamadas prog1, prog2, prog3, prog4, en cada carpeta contenía las imágenes que rotaban según el día; de lunes a jueves prog1, viernes prog2, sábados prog3, domingo prog4. cada imagen tenia como nombre la hora; ejemplo 20-00.jpg , 22-00.jpg ,23-59.jpg y así sucesivamente rotaban según la hora en que estaban escritas las imágenes.

ACÁ ESTA EL CÓDIGO FINAL:

<?php
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );
global $mosConfig_absolute_path, $mosConfig_live_site;
$type = $params->get( 'type', 'jpg' );
$folder = $params->get( 'folder' ); /*En esta linea (supongo) que carga la ruta de las imágenes
que tu has incluido un paso antes, en el administrador de joomla
supongo... nunca he usado joomla
Borra esa línea y pones aquí a ver si funciona,
no estaría demás que hicieras un echo $folder;
para ver que contiene la variable*/
$día = date(w);
if ($día==0) //es domingo;
$folder = './prog2/';
elseif ($día==6) //es sábado
$folder = './prog3/';
else //es entre semana
$folder = './prog1/';
/* las rutas dependen de donde tengas las imágenes,
por eso es mejor que antes de nada veas que contiene $folder*/
$link = $params->get( 'link' , '#');
$width = $params->get( 'width' );
$height = $params->get( 'height' );
$class_sfx = $params->get( 'moduleclass_sfx' );
$the_array = array();
$the_image = array();
// if folder includes livesite info, remove
if ( strpos($folder, $mosConfig_live_site) === 0 ) {
$folder = str_replace( $mosConfig_live_site, '', $folder );
}
// if folder includes absolute path, remove
if ( strpos($folder, $mosConfig_absolute_path) === 0 ) {
$folder= str_replace( $mosConfig_absolute_path, '', $folder );
}
// if folder doesnt contain slash to start, add
if ( strpos($folder, '/') !== 0 ) {
$folder = '/'. $folder;
}
// construct absolute path to directory
$abspath_folder = $mosConfig_absolute_path . $folder;
// check if directory exists
if (is_dir($abspath_folder) && $files=glob($abspath_folder.'*')) {
$current_time = date('Hi', time());
if( !empty($files)) {
foreach( $files as $f ){
$m = array();
$r = preg_match('/([0-9]{4})\-([0-9]{4})/',basename($f),$m);
#echo $m[1].'-'.$m[2].' - '.($m[1]<=$current_time).'- '.( $m[2]>=$current_time).'- '.$folder.basename($f).'<hr>';
if( !empty($m) && !empty($m[1]) && !empty($m[2]) && $m[1]<=$current_time && $m[2]>=$current_time ){
printf("<div class=\"moduletable%s\"><a href=\"%s\" ><img src=\"%s\" width=\"%s\" alt=\"image\" height=\"%s\"</div> ",
$class_sfx,
$link,
$mosConfig_live_site.$folder.basename($f),
$width,
$height
);
}
}
#var_dump('<pre>',$files,'</pre>');
}
}
?>

No soy un especialista en wordpress pero la función que te di lo que hace es usar una etiqueta de imagen para que cambie su propiedad src dependiendo de la hora y día en la cual se despliegue.

Funcionaría en cualquier tipo de proyecto, solo tienes que llamar esta función desde el html de tu sitio añadiendo esta función dentro de tus librerías de wordpress.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas