X

Data de Início, Data de Fim, Metabox para Tipos de Postagem Personalizados de Eventos

Snippets por IsItWP

Você quer adicionar três metaboxes aos seus tipos de postagem personalizados de eventos? Embora provavelmente exista um plugin para isso, criamos um trecho de código rápido que você pode usar para adicionar metaboxes de data de início, data de término e local para tipos de postagem personalizados de eventos.

Instruções:

Tudo o que você precisa fazer é adicionar este código ao arquivo functions.php do seu tema ou a um plugin específico do site:

function ep_eventposts_metaboxes() {
    add_meta_box( 'ept_event_date_start', 'Start Date and Time', 'ept_event_date', 'event', 'side', 'default', array( 'id' => '_start') );
    add_meta_box( 'ept_event_date_end', 'End Date and Time', 'ept_event_date', 'event', 'side', 'default', array('id'=>'_end') );
    add_meta_box( 'ept_event_location', 'Event Location', 'ept_event_location', 'event', 'side', 'default', array('id'=>'_end') );
}
add_action( 'admin_init', 'ep_eventposts_metaboxes' );
 
// Metabox HTML
 
function ept_event_date($post, $args) {
    $metabox_id = $args['args']['id'];
    global $post, $wp_locale;
 
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
 
    $time_adj = current_time( 'timestamp' );
    $month = get_post_meta( $post->ID, $metabox_id . '_month', true );
 
    if ( empty( $month ) ) {
        $month = gmdate( 'm', $time_adj );
    }
 
    $day = get_post_meta( $post->ID, $metabox_id . '_day', true );
 
    if ( empty( $day ) ) {
        $day = gmdate( 'd', $time_adj );
    }
 
    $year = get_post_meta( $post->ID, $metabox_id . '_year', true );
 
    if ( empty( $year ) ) {
        $year = gmdate( 'Y', $time_adj );
    }
 
    $hour = get_post_meta($post->ID, $metabox_id . '_hour', true);
 
    if ( empty($hour) ) {
        $hour = gmdate( 'H', $time_adj );
    }
 
    $min = get_post_meta($post->ID, $metabox_id . '_minute', true);
 
    if ( empty($min) ) {
        $min = '00';
    }
 
    $month_s = '<select name="' . $metabox_id . '_month">';
    for ( $i = 1; $i < 13; $i = $i +1 ) {
        $month_s .= "\t\t\t" . '<option value="' . zeroise( $i, 2 ) . '"';
        if ( $i == $month )
            $month_s .= ' selected="selected"';
        $month_s .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n";
    }
    $month_s .= '</select>';
 
    echo $month_s;
    echo '<input type="text" name="' . $metabox_id . '_day" value="' . $day  . '" size="2" maxlength="2" />';
    echo '<input type="text" name="' . $metabox_id . '_year" value="' . $year . '" size="4" maxlength="4" /> @ ';
    echo '<input type="text" name="' . $metabox_id . '_hour" value="' . $hour . '" size="2" maxlength="2"/>:';
    echo '<input type="text" name="' . $metabox_id . '_minute" value="' . $min . '" size="2" maxlength="2" />';
 
}
 
function ept_event_location() {
    global $post;
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
    // The metabox HTML
    $event_location = get_post_meta( $post->ID, '_event_location', true );
    echo '<label for="_event_location">Location:</label>';
    echo '<input type="text" name="_event_location" value="' . $event_location  . '" />';
}
 
// Save the Metabox Data
 
function ep_eventposts_save_meta( $post_id, $post ) {
 
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;
 
    if ( !isset( $_POST['ep_eventposts_nonce'] ) )
        return;
 
    if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) )
        return;
 
    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post->ID ) )
        return;
 
    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though
 
    $metabox_ids = array( '_start', '_end' );
 
    foreach ($metabox_ids as $key ) {
        $events_meta[$key . '_month'] = $_POST[$key . '_month'];
        $events_meta[$key . '_day'] = $_POST[$key . '_day'];
            if($_POST[$key . '_hour']<10){
                 $events_meta[$key . '_hour'] = '0'.$_POST[$key . '_hour'];
             } else {
                   $events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
             }
        $events_meta[$key . '_year'] = $_POST[$key . '_year'];
        $events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
        $events_meta[$key . '_minute'] = $_POST[$key . '_minute'];
        $events_meta[$key . '_eventtimestamp'] = $events_meta[$key . '_year'] . $events_meta[$key . '_month'] . $events_meta[$key . '_day'] . $events_meta[$key . '_hour'] . $events_meta[$key . '_minute'];
    }
 
    // Add values of $events_meta as custom fields
 
    foreach ( $events_meta as $key => $value ) { // Cycle through the $events_meta array!
        if ( $post->post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode( ',', (array)$value ); // If $value is an array, make it a CSV (unlikely)
        if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
            update_post_meta( $post->ID, $key, $value );
        } else { // If the custom field doesn't have a value
            add_post_meta( $post->ID, $key, $value );
        }
        if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
    }
 
}
 
add_action( 'save_post', 'ep_eventposts_save_meta', 1, 2 );
 
/**
 * Helpers to display the date on the front end
 */
 
// Get the Month Abbreviation
 
function eventposttype_get_the_month_abbr($month) {
    global $wp_locale;
    for ( $i = 1; $i < 13; $i = $i +1 ) {
                if ( $i == $month )
                    $monthabbr = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
                }
    return $monthabbr;
}
 
// Display the date
 
function eventposttype_get_the_event_date() {
    global $post;
    $eventdate = '';
    $month = get_post_meta($post->ID, '_month', true);
    $eventdate = eventposttype_get_the_month_abbr($month);
    $eventdate .= ' ' . get_post_meta($post->ID, '_day', true) . ',';
    $eventdate .= ' ' . get_post_meta($post->ID, '_year', true);
    $eventdate .= ' at ' . get_post_meta($post->ID, '_hour', true);
    $eventdate .= ':' . get_post_meta($post->ID, '_minute', true);
    echo $eventdate;
}

Observação: Se esta é a primeira vez que você adiciona trechos de código no WordPress, consulte nosso guia sobre como copiar / colar trechos de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site, como: 15 melhores ferramentas e plugins de marketing de conteúdo e Mais de 50 melhores temas responsivos do WordPress para criar um site pronto para dispositivos móveis.

Comentários   Deixe uma resposta

  1. Olá a todos,

    este trecho de código é ótimo! Obrigado!!

    Mas eu tenho uma pergunta…
    como posso exibir apenas o DIA do evento na linha superior e uma linha abaixo quero exibir o MÊS.

    obrigado pelo seu suporte.
    Sven

  2. Kévin Lemonnier May 17, 2015 at 11:51 am

    Melhorei este tipo de postagem para criar apenas _start_timestamp e _end_timestamp no banco de dados e não dia, mês, ano, minuto e hora.

  3. Olá,
    Como exibir eventos futuros e eventos passados?

  4. O código não parece estar salvando os dados de Localização. Verifiquei o banco de dados, não está lá e não está sendo preenchido no formulário ao atualizar.

    1. solução:
      adicione a seguinte linha logo antes deste comentário: // Adiciona valores de $events_meta como campos personalizados

      $events_meta[‘_event_location’] = $_POST[‘_event_location’];

      Eu sei que já se passaram 2 anos, mas isso faz funcionar e pode ser útil para outros 😉

  5. código de exemplo sobre isso?

  6. A partir deste código, como você exibe uma lista desses eventos em uma única página do tema?

    1. Bem, os eventos neste caso seriam um tipo de postagem personalizado ou sua postagem padrão. Exibir seus eventos é o mesmo que qualquer outro tipo de postagem personalizado, etc. Este trecho apenas coleta informações de campos personalizados dentro dos seguintes valores: _day, _year, _hour, _minute, e você pode exibi-los usando a função eventposttype_get_the_event_date na parte inferior. Nas linhas 02, 03, 04, você vê que está anexado a um tipo de postagem personalizado chamado 'event'; você pode alterá-lo para post ou qualquer outro tipo de postagem que desejar. Em seguida, basta exibir as postagens normalmente.

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!