web-dev-qa-db-fra.com

N'afficher que metabox lorsque la date-valeur dans d'autres metabox est terminée?

probablement une question étrange. J'utilise les classes personnalisées MetaBox et CustomFields par jaredatch sur Github.

J'ai cette metabox "date-événement":

$meta_boxes[] = array(
        'id'         => 'event_date',
        'title'      => 'Event Date',
        'pages'      => array( 'wr_event', ),
        'context'    => 'normal',
        'priority'   => 'high',
        'fields'     => array(
            array(
                'name' => 'Test Date Picker (UNIX timestamp)',
                'desc' => 'field description (optional)',
                'id'   => $prefix . 'event_date',
                'type' => 'text_date_timestamp',
            )
        ),
    );

J'ai un deuxième metabox appelé "event-review"

$meta_boxes[] = array(
    'id'         => 'wr_event_review',
    'title'      => 'Event Review',
    'pages'      => array( 'wr_event', ), // Post type
    'context'    => 'normal',
    'priority'   => 'high',
    'show_names' => true, // Show field names on the left
    'fields'     => array(
        array(
            'name'    => 'Event Review',
            'id'      => $prefix . 'event_wysiwyg',
            'type'    => 'wysiwyg',
            'options' => array( 'textarea_rows' => 5, ),
        )
    ),
);

Je me demande s'il est possible d'afficher la metabox d'évaluation d'événement uniquement lorsque la date est terminée?

Quelque chose comme…

if ( date('U') > date('U', $_POST["_wr_event_date"] ) ) {
     $meta_boxes[] = array(
        'id'         => 'wr_event_review',
        'title'      => 'Event Review',

Cependant, je ne sais pas si c'est même possible ni même comment je peux obtenir le event_date actuel qui est dans l'entrée.

Des idées à ce sujet?

3
mathiregister

Pas sûr de la classe liée - il semble qu'ils collectent les métaboxes immédiatement et il n'y a donc aucune information concernant la publication en cours.

En général, oui, c'est possible. Pour ajouter un metabox:

add_action( 'add_meta_boxes', 'myplugin_add_my_custom_box',10,2);

Voir le code source ici . Ce hook add_meta_boxes transmet deux variables: le type de publication et l'objet de publication. Vous pouvez utiliser la publication pour obtenir la méta de publication, puis appelez add_meta_box le cas échéant.

function myplugin_add_my_custom_box($post_type,$post){
     //Get event date as a timestamp
     $event_date = (int) get_post_meta($post->ID,'_wr_event_date',true);

     //Check date exists and is in the past. If not, return: don't add metabox.
     if( empty($event_date) || current_time('timestamp') < $event_date)
         return;

     add_meta_box( 
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ),
        'myplugin_metabox_callback',
        'event' 
    );      
}

Vous remarquerez qu'il existe également un hook add_meta_boxes_{$post_type} - plus efficace si vous voulez simplement l'ajouter à des types de publications 'event_cpt':

     add_action( 'add_meta_boxes_event_cpt', 'myplugin_add_my_custom_box',10,1);

Dans ce cas, votre rappel n'inclut que le $post en tant qu'argument!

Remarque: évitez d'utiliser les fonctions de date/heure de php: Par défaut, le fuseau horaire sera toujours défini sur UTC. Si vous voulez que la date/heure actuelle dans le fuseau horaire des blogs utilise quelque chose comme current_time ()

1
Stephen Harris

Si vous souhaitez afficher ou masquer la méta-boîte entière lorsque la date de l'événement est modifiée, vous pouvez essayer d'utiliser le plug-in Logique conditionnelle , de manière à pouvoir réécrire votre code. :

    $meta_boxes[] = array(
    'id'         => 'wr_event_review',
    'title'      => 'Event Review',
    'pages'      => array( 'wr_event', ), // Post type
    'context'    => 'normal',
    'priority'   => 'high',
    'show_names' => true, // Show field names on the left
    'visible'    => array('event_date', '>', '2015-08-25'),
    'fields'     => array(
        array(
            'name'    => 'Event Review',
            'id'      => $prefix . 'event_wysiwyg',
            'type'    => 'wysiwyg',
            'options' => array( 'textarea_rows' => 5, ),
        )
    ),
);

Vous pouvez remplacer "2015-08-25" par la valeur de votre choix;)

1
Long Trịnh

J'irais pour une solution JavaScript ici. Ainsi, vous avez la possibilité d'afficher ou de masquer instantanément le métabox de vérification d'événement en fonction de la date saisie dans le métabox de date d'événement.

J'ai fourni une solution à un problème très similaire dans lequel un métabox devait être basculé en fonction du modèle de page choisi.

Voir: Basculer la metabox admin en fonction du modèle de page choisi

1
Geert