web-dev-qa-db-ja.com

カスタム投稿タイプ - カスタムフィールドを含める方法

私はワードプレスとコンテンツ管理システムについてはかなり新しいです。私は始めるために2、3のチュートリアルに従ってきました。新しいカスタム投稿タイプに日付ピッカーを含める方法を特に探しています。

My Events Custom Post Type 

イベントがいつ発生するかを指定する日付をユーザーが選択できるように、ここに追加のフィールドを追加します。ユーザーが手動でテキストを使って日付を入力するのではなく、通常のhtml5の日付ピッカーであれjqueryの日付ピッカーであれ、日付ピッカーを使いたいのです。

私がこれを生成するのに使ったコードはfunctions.phpの中にあります、私はこれが私のすべてのコードを置くためのおそらく最良の場所ではないことを理解します。

    /*
    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' );

前もって感謝します。

2
Vemuez

Sunilの助けを借りて、私は自分が何をする必要があるのか​​正確に把握しました。

Metaboxの無料版を https://wordpress.org/plugins/meta-box/ にダウンロードしてダウンロードしました。

ダウンロードしたら、child-theme/external/metaboxに置き、child-theme/inc/events-custom-post-type.phpから参照しました。

events-custom-post-type.phpはこんな感じです。

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' );

custom_events関数はカスタム投稿タイプを設定し、prefix_register_meta_boxes_events関数はカスタムフィールド日付ピッカーを設定します。

あなたはそれをprefix_register_meta_boxes_events関数で確かめなければなりません、それはあなた自身のカスタム投稿タイプが登録されているものを追加するためにpost_typesを言います。

その後、このファイルをchild-theme/functions.phpで参照しました。

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

@vemuez

jsファイルとcssファイルをadmin_print_scriptとadmin_print_styleにエンキューする必要があります。

これを行う方法の例です。

// 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');

またはこれを試してください https://en.bainternet.info/how-i-add-a-wordpress-metabox/#toc-dn

1
sunil