Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

Modificar calendario PHP para que salgan todos los meses

Estas en el tema de Modificar calendario PHP para que salgan todos los meses en el foro de WordPress en Foros del Web. Yo se que es un calendario de Wordpress pero lo pongo aquí porque básicamente todo es PHP. Estoy buscando obtener los datos del diario oficial ...
  #1 (permalink)  
Antiguo 25/04/2012, 19:21
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 4 meses
Puntos: 15
Modificar calendario PHP para que salgan todos los meses

Yo se que es un calendario de Wordpress pero lo pongo aquí porque básicamente todo es PHP. Estoy buscando obtener los datos del diario oficial de la federación (de México), y que al darle clic en las fechas puedas navegar por los siguientes meses.

Lo del las ligas al diario oficial de la federación (DOF) ya funciona perfectamente, uso el URL del DOF (que usa fechas para desplegar la inforamción). Eso no es ya el problema, sino que el calendario de Wordpress te permite desplazarte mientras existan posts en los distintos meses, y yo quiero que te muevas a través de los meses sin ninguna limitante.

Este es el código del calendario. Ya está modificado para que ponga el link en todos los días y no solo cuando existan posts.

Código PHP:
function get_calendar($initial true$echo true) {
    global 
$wpdb$m$monthnum$year$wp_locale$posts;

    
$cache = array();
    
$key md5$m $monthnum $year );
    if ( 
$cache wp_cache_get'get_calendar''calendar' ) ) {
        if ( 
is_array($cache) && isset( $cache$key ] ) ) {
            if ( 
$echo ) {
                echo 
apply_filters'get_calendar',  $cache[$key] );
                return;
            } else {
                return 
apply_filters'get_calendar',  $cache[$key] );
            }
        }
    }

    if ( !
is_array($cache) )
        
$cache = array();

    
// Quick check. If we have no posts at all, abort!
    
if ( !$posts ) {
        
$gotsome $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1");
        if ( !
$gotsome ) {
            
$cache$key ] = '';
            
wp_cache_set'get_calendar'$cache'calendar' );
            return;
        }
    }

    if ( isset(
$_GET['w']) )
        
$w ''.intval($_GET['w']);

    
// week_begins = 0 stands for Sunday
    
$week_begins intval(get_option('start_of_week'));

    
// Let's figure out when we are
    
if ( !empty($monthnum) && !empty($year) ) {
        
$thismonth ''.zeroise(intval($monthnum), 2);
        
$thisyear ''.intval($year);
    } elseif ( !empty(
$w) ) {
        
// We need to get the month from MySQL
        
$thisyear ''.intval(substr($m04));
        
$d = (($w 1) * 7) + 6//it seems MySQL's weeks disagree with PHP's
        
$thismonth $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')");
    } elseif ( !empty(
$m) ) {
        
$thisyear ''.intval(substr($m04));
        if ( 
strlen($m) < )
                
$thismonth '01';
        else
                
$thismonth ''.zeroise(intval(substr($m42)), 2);
    } else {
        
$thisyear gmdate('Y'current_time('timestamp'));
        
$thismonth gmdate('m'current_time('timestamp'));
    }

    
$unixmonth mktime(00$thismonth1$thisyear);
    
$last_day date('t'$unixmonth);

    
// Get the next and previous month and year with at least one post
    
$previous $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
        FROM $wpdb->posts
        WHERE post_date < '$thisyear-$thismonth-01'
        AND post_type = 'post' AND post_status = 'publish'
            ORDER BY post_date DESC
            LIMIT 1"
);
    
$next $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
        FROM $wpdb->posts
        WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
        AND post_type = 'post' AND post_status = 'publish'
            ORDER BY post_date ASC
            LIMIT 1"
);

    
/* translators: Calendar caption: 1: month name, 2: 4-digit year */
    
$calendar_caption _x('%1$s %2$s''calendar caption');
    
$calendar_output '<table id="wp-calendar">
    <caption>' 
sprintf($calendar_caption$wp_locale->get_month($thismonth), date('Y'$unixmonth)) . '</caption>
    <thead>
    <tr>'
;

    
$myweek = array();

    for ( 
$wdcount=0$wdcount<=6$wdcount++ ) {
        
$myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7);
    }

    foreach ( 
$myweek as $wd ) {
        
$day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd);
        
$wd esc_attr($wd);
        
$calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$day_name</th>";
    }

    
$calendar_output .= '
    </tr>
    </thead>

    <tfoot>
    <tr>'
;

    if ( 
$previous ) {
        
$calendar_output .= "\n\t\t".'<td colspan="3" id="prev"><a href="' get_month_link($previous->year$previous->month) . '" title="' esc_attrsprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($previous->month), date('Y'mktime(00$previous->month1$previous->year)))) . '">&laquo; ' $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '</a></td>';
    } else {
        
$calendar_output .= "\n\t\t".'<td colspan="3" id="prev" class="pad">&nbsp;</td>';
    }

    
$calendar_output .= "\n\t\t".'<td class="pad">&nbsp;</td>';

    if ( 
$next ) {
        
$calendar_output .= "\n\t\t".'<td colspan="3" id="next"><a href="' get_month_link($next->year$next->month) . '" title="' esc_attrsprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($next->month), date('Y'mktime(00$next->month1$next->year))) ) . '">' $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' &raquo;</a></td>';
    } else {
        
$calendar_output .= "\n\t\t".'<td colspan="3" id="next" class="pad">&nbsp;</td>';
    }

    
$calendar_output .= '
    </tr>
    </tfoot>

    <tbody>
    <tr>'
;

    
// Get days with posts
    
$dayswithposts $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
        FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
        AND post_type = 'post' AND post_status = 'publish'
        AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'"
ARRAY_N);
    if ( 
$dayswithposts ) {
        foreach ( (array) 
$dayswithposts as $daywith ) {
            
$daywithpost[] = $daywith[0];
        }
    } else {
        
$daywithpost = array();
    }

    if (
strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'camino') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false)
        
$ak_title_separator "\n";
    else
        
$ak_title_separator ', ';

    
$ak_titles_for_day = array();
    
$ak_post_titles $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom "
        
."FROM $wpdb->posts "
        
."WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' "
        
."AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' "
        
."AND post_type = 'post' AND post_status = 'publish'"
    
);
    if ( 
$ak_post_titles ) {
        foreach ( (array) 
$ak_post_titles as $ak_post_title ) {

                
$post_title esc_attrapply_filters'the_title'$ak_post_title->post_title$ak_post_title->ID ) );

                if ( empty(
$ak_titles_for_day['day_'.$ak_post_title->dom]) )
                    
$ak_titles_for_day['day_'.$ak_post_title->dom] = '';
                if ( empty(
$ak_titles_for_day["$ak_post_title->dom"]) ) // first one
                    
$ak_titles_for_day["$ak_post_title->dom"] = $post_title;
                else
                    
$ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator $post_title;
        }
    }


    
// See how much we should pad in the beginning
    
$pad calendar_week_mod(date('w'$unixmonth)-$week_begins);
    if ( 
!= $pad )
        
$calendar_output .= "\n\t\t".'<td colspan="'esc_attr($pad) .'" class="pad">&nbsp;</td>';

    
$daysinmonth intval(date('t'$unixmonth));
    for ( 
$day 1$day <= $daysinmonth; ++$day ) {
        if ( isset(
$newrow) && $newrow )
            
$calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
        
$newrow false;

        if ( 
$day == gmdate('j'current_time('timestamp')) && $thismonth == gmdate('m'current_time('timestamp')) && $thisyear == gmdate('Y'current_time('timestamp')) )
            
$calendar_output .= '<td id="today">';
        else
            
$calendar_output .= '<td>';


                
$calendar_output .= '<a href="' get_day_linked$thisyear$thismonth$day ) . '" title="' esc_attr$ak_titles_for_day$day ] ) . "\">$day</a>";

        if ( 
== calendar_week_mod(date('w'mktime(00$thismonth$day$thisyear))-$week_begins) )
            
$newrow true;
    }

    
$pad calendar_week_mod(date('w'mktime(00$thismonth$day$thisyear))-$week_begins);
    if ( 
$pad != && $pad != )
        
$calendar_output .= "\n\t\t".'<td class="pad" colspan="'esc_attr($pad) .'">&nbsp;</td>';

    
$calendar_output .= "\n\t</tr>\n\t</tbody>\n\t</table>";

    
$cache$key ] = $calendar_output;
    
wp_cache_set'get_calendar'$cache'calendar' );

    if ( 
$echo )
        echo 
apply_filters'get_calendar',  $calendar_output );
    else
        return 
apply_filters'get_calendar',  $calendar_output );


Esta es la función, que se encuentra en functions.php que hice para que muestre el link correspondiente al día de las publicaciones del Diario Oficial de la Federación (este ya está bien y funciona a la perfección).

Código PHP:
function get_day_linked($year$month$day) {
        global 
$wp_rewrite;
        if ( !
$year )
                
$year gmdate('Y'current_time('timestamp'));
            if ( !
$month )
               
$month gmdate('m'current_time('timestamp'));
        if ( !
$day )
                
$day gmdate('j'current_time('timestamp'));

        
$daylink $wp_rewrite->get_day_permastruct();
        if ( !empty(
$daylink) ) {
                    
$daylink str_replace('%year%'$year$daylink);
                    
$daylink str_replace('%monthnum%'zeroise(intval($month), 2), $daylink);
                
$daylink str_replace('%day%'zeroise(intval($day), 2), $daylink);
                
                return 
apply_filters('day_link''http://dof.gob.mx/index.php?year='.$year.'&month='.$month.'&day='.$day.'');
        } else {
                return 
apply_filters('day_link'home_url'?m=' $year zeroise($month2) . zeroise($day2) ), $year$month$day);
        }

Si de paso saben como puedo desactivar los links en fines de semana sería de gran ayuda.

Muchas gracias.

Etiquetas: calendario, meses, modificar, mysql, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:48.