web-dev-qa-db-fra.com

Types de messages personnalisés - Comment inclure des champs personnalisés

Je suis assez nouveau pour Wordpress et le système de gestion de contenu. J'ai suivi quelques tutoriels pour commencer. Je cherchais précisément comment inclure un sélecteur de date dans l'ajout d'un nouveau type de publication personnalisé.

 My Events Custom Post Type 

Je souhaite ajouter ici un champ supplémentaire permettant à l'utilisateur de sélectionner une date pour spécifier le moment où l'événement aura lieu. Je ne veux pas que l'utilisateur tape manuellement la date sous forme de texte mais souhaite utiliser un sélecteur de date, que ce soit un datepicker html5 normal ou un jquery.

Le code que j'avais l'habitude de générer se trouve dans le functions.php. Je comprends que ce n'est probablement pas le meilleur endroit pour mettre tout mon code, mais je suis en train d'expérimenter pour l'instant mais je n'arrive pas à trouver une solution à mon problème. .

    /*
    Custom post types
*/

function awesome_custom_post_type ()
{
    $labels = array(
        'name' => 'Events',
        'singular_name' => 'Event',
        'add_new' => 'Add Event',
        'all_items' => 'All Events',
        'add_new_item' => 'Add Event',
        'edit_item' => 'Edit Event',
        'new_item' => 'New Event',
        'view_item' => 'View Event',
        'search_item_label' => 'Search Events',
        'not_found' => 'No Events Found',
        'not_found_in_trash' => 'No Events Found in Trash',
        'parent_item_colon' => 'Parent Event'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'publicly_queryable' => false,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => true,
        'supports' => array(
            'title',
            'editor',
            'thumbnail',
        ),
        'menu_icon' => 'dashicons-calendar-alt',
        'menu_position' => 5,
        'excluse_from_search' => true
    );

    register_post_type( 'awesome_events', $args );
}
add_action( 'init', 'awesome_custom_post_type' );

Merci d'avance.

2
Vemuez

Avec Sunil, j'ai compris exactement ce que je devais faire.

Je suis allé télécharger la version gratuite de Metabox à https://wordpress.org/plugins/meta-box/

Une fois que je l'ai téléchargé, je l'ai placé dans child-theme/external/metaboxet l'ai référencé à partir de child-theme/inc/events-custom-post-type.php.

events-custom-post-type.php ressemble à ceci.

require_once(get_stylesheet_directory() . '/external/meta-box/meta-box.php');

function custom_events ()
{
    $labels = array(
        'name' => 'Events',
        'singular_name' => 'Event',
        'add_new' => 'Add Event',
        'all_items' => 'All Events',
        'add_new_item' => 'Add Event',
        'edit_item' => 'Edit Event',
        'new_item' => 'New Event',
        'view_item' => 'View Event',
        'search_item_label' => 'Search Events',
        'not_found' => 'No Events Found',
        'not_found_in_trash' => 'No Events Found in Trash',
        'parent_item_colon' => 'Parent Event'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'publicly_queryable' => false,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => true,
        'supports' => array(
            'title',
            'editor',
        ),
        'menu_icon' => 'dashicons-calendar-alt',
        'menu_position' => 5,
        'excluse_from_search' => true
    );

    register_post_type( 'custom_events_post_type', $args );
}

function prefix_register_meta_boxes_events( $meta_boxes ) {
    $prefix = 'custom_event_';

    $meta_boxes[] = array(
        'id'         => $prefix . 'details',
        'title'      => 'Event details',
        'post_types' => 'custom_events_post_type',
        'context'    => 'normal',
        'priority'   => 'high',

        'fields' => array(
            array(
                'name'  => 'Event date',
                'desc'  => 'Select event date',
                'id'    => $prefix . 'date',
                'type'  => 'date',
            ),
            array (
                'name' => 'Event location',
                'desc' => 'Location of the event',
                'id'   => $prefix . 'location',
                'type' => 'text'
            )
        )
    );

    return $meta_boxes;
}

add_action( 'init', 'custom_events' );

add_filter( 'rwmb_meta_boxes', 'prefix_register_meta_boxes_events' );

La fonction custom_events configure le type de publication personnalisé tandis que la fonction prefix_register_meta_boxes_events configure le sélecteur de date de champ personnalisé.

Vous devez simplement vous assurer que, dans la fonction prefix_register_meta_boxes_events, où il est écrit post_types, vous pouvez ajouter le type de votre propre type de publication personnalisé.

Après cela, je viens de référencer ce fichier dans child-theme/functions.php comme tel.

require get_stylesheet_directory() . '/inc/events-custom-post-type.php';
0
Vemuez

@vemuez

vous devez mettre en file d'attente les fichiers js et css dans admin_print_script et admin_print_style

voici l'exemple pour savoir comment le faire

// Register datepicker ui for properties

function admin_homes_for_sale_javascript()
{
    global $post;
    if($post->post_type == 'homes-for-sale' && is_admin()) {
        wp_enqueue_script('jquery-ui-datepicker', WP_CONTENT_URL . '/themes/yourthemename/js/jquery-ui-datepicker.min.js');  
    }
}
add_action('admin_print_scripts', 'admin_homes_for_sale_javascript');

// Register ui styles for properties

function admin_homes_for_sale_styles(){
    global $post;
    if($post->post_type == 'homes-for-sale' && is_admin()) {
        wp_enqueue_style('jquery-ui', WP_CONTENT_URL . '/themes/yourthemename/css/jquery-ui-1.8.11.custom.css');  
    }
}
add_action('admin_print_styles', 'admin_homes_for_sale_styles');

ou essayez ceci https://fr.bainternet.info/how-i-add-a-wordpress-metabox/#toc-dn

1
sunil