it-swarm.com.de

Formatieren Sie das Datum der benutzerdefinierten Meta-Box von JJJJ/MM/TT zu einer besser lesbaren Alternative

FRAGE

Dies ist die Antwort auf eine frühere Frage, die Milo zuvor hier gnädigerweise beantwortet hat. - So sortieren Sie CPT nach benutzerdefiniertem Metawert (Datum) und geben die Beiträge Monat für Monat zurück.

Kurz gesagt, ich habe einige Probleme mit der korrekten Formatierung meiner benutzerdefinierten Meta-Box-Daten in einigen Bereichen ... Nämlich im Back-End in meinen benutzerdefinierten Spalten und dann im Front-End in meiner Archivvorlage.

In meiner Archivvorlage versuche ich beispielsweise, das aktuelle Datum, zu dem die Beiträge gehören, über den unten eingefügten Code zurückzugeben. Wenn ich jedoch einen Monat ohne Beiträge besuche, gibt meine Vorlage stattdessen das Datum "Januar 1970" zurück.

<?php $calendar_month = get_post_meta($post->ID, 'epr_startdate', TRUE);?>
<?php $this_month = strtotime($calendar_month); ?>
<span id="current_month"><?php echo date( 'F Y', $this_month ); ?></span>

Außerdem versuche ich, es im Back-End so zu gestalten, dass NUR diese Informationen ausgegeben werden, wenn nur das "Startdatum" erstellt wird. Wenn der Benutzer dann sowohl ein "Startdatum" als auch ein "Enddatum" eingibt Führen Sie beide Daten erneut aus. Wenn ich jedoch das folgende Codebeispiel verwende, werden meine Startdaten stattdessen doppelt wie folgt zurückgegeben: 3. März 2013 - 3. März 2013.

case "eventdate":
                $eventstart = get_post_meta($post->ID, 'epr_startdate', true);
                $eventstart_col = strtotime($eventstart);

                $eventend = get_post_meta($post->ID, 'epr_enddate', true);
                $eventend_col = strtotime($eventend);

                if ( get_post_meta($post->ID, 'epr_startdate', true) && ! get_post_meta($post->ID, 'epr_enddate', true) )
                    echo date( 'M n, Y', $eventstart_col );
                elseif ( get_post_meta($post->ID, 'epr_enddate', true) )
                    echo date( 'M n, Y', $eventstart_col ) . ' &mdash; ' . date( 'M n, Y', $eventend_col );
                else
                    echo 'NA';
                break;

Vielen Dank im Voraus für Ihre Zeit.
Beste


ENDGÜLTIGE LÖSUNG

Vielen Dank an s_ha_dum für seine Geduld und Unterstützung!
Unten sind die endgültigen Arbeitslösungen für meine Frage eingefügt ...

Das Datum korrekt ausgeben, wenn für den aktuell abgefragten Monat keine Beiträge vorhanden sind:

<?php $this_month = strtotime($calendar_month);
if (false === $this_month) {
$this_month = strtotime(get_query_var( 'calendar_year' ) . get_query_var( 'calendar_month' ) .'01');
} ?>
<span id="current_month"><?php echo date( 'F Y', $this_month ); ?></span><?php
?>

Benutzerdefinierte Spalten:

case "eventdate":
                $start_date = get_post_meta($post->ID, 'epr_startdate', true);
                $start_date_col = strtotime($start_date);           
                $end_date = get_post_meta($post->ID, 'epr_enddate', true);
                $end_date_col = strtotime($end_date);

                if ( $start_date_col && !$end_date_col ) 
                    echo date( 'M d, Y', $start_date_col );
                elseif ( $start_date_col && $end_date_col )
                    echo date( 'M d, Y', $start_date_col ) . ' &mdash; ' . date( 'M d, Y', $end_date_col );  
                else
                    echo 'NA';
                break;

Umleitung/kalender ->/kalender/jjjj/mm:

function redirect_empty_archive() {
$m = get_query_var('calendar_month');
$y = get_query_var('calendar_year');
    if (
        is_post_type_archive('calendar') &&
        ( empty($m) || empty($y) )
    ) {
        wp_safe_redirect( '/calendar' . date('/Y/m') );
    }
}
add_action('template_redirect','redirect_empty_archive');
3
Mr.Brown

wenn ich jedoch einen Monat ohne Beiträge besuche, gibt meine Vorlage stattdessen das Datum "Januar 1970" zurück.

Ja. Das wird passieren. UNIXTIME begann am 1. Januar 1970. Das ist "0000/00/00", aber negative Zahlen funktionieren bis 1901. strtotime gibt false für alles außerhalb dieses Bereichs zurück, einschließlich Ihrer nicht vorhandenen Daten. date nimmt "Tag Null" an, wenn ein falsches Datum angegeben wird. Daher erhalten Sie den 1. Januar 1970 für nicht vorhandene oder anderweitig fehlerhafte Daten. 64-Bit-Maschinen können größere Bereiche verarbeiten, wenn ich mich richtig erinnere. In jedem Fall gibt Ihnen ein nicht existierendes Datum 1970. Versuchen Sie:

$calendar_month = "1901/01/01";
$this_month = strtotime($calendar_month);
var_dump($this_month);
echo '<br />';
echo date('Y',$this_month);
echo '<br />';

Sie möchten sicherstellen, dass Sie ein gutes Datum haben, bevor Sie es anzeigen.

<?php $this_month = strtotime($calendar_month); 
if (false !== $this_month) { ?>
  <span id="current_month"><?php echo date( 'F Y', $this_month ); ?></span><?php
}

Ihr anderer Code ist etwas sperrig, sieht aber so aus, als ob er funktionieren sollte, außer dass Ihr Datumsformat falsch ist. Sie erhalten nicht, wie ich vermute, "Month Day, Year", sondern "Month-Name Month-Number, Year", was wie ein Duplikat aussieht, wenn die beiden Daten im selben Monat/Jahr liegen. Schauen Sie sich die Datumsformatierungsoperatoren an .

$eventstart = get_post_meta($post->ID, 'epr_startdate', true);
$eventstart_col = strtotime($eventstart);

$eventend = get_post_meta($post->ID, 'epr_enddate', true);
$eventend_col = strtotime($eventend);

if ( $eventstart_col && !$eventend_col ) {
    // only the start date
    echo date( 'M d, Y', $eventstart_col );
} elseif ( $eventstart_col && $eventend_col ) {
    // both start and end date
    echo date( 'M d, Y', $eventstart_col ) . ' &mdash; ' . date( 'M d, Y', $eventend_col );  
} else {
    echo 'NA';
}

Ich denke ich habe das wieder richtig zusammengesetzt.

2
s_ha_dum