source

커스텀 투고 타입에 커스텀필드를 추가하는 방법

gigabyte 2023. 3. 15. 19:40
반응형

커스텀 투고 타입에 커스텀필드를 추가하는 방법

좋은 아침이에요.

'Products'라는 커스텀 포스트 타입을 작성했습니다.커스텀 필드(metabox가 올바른 용어입니까?)를 만들고 싶습니다.여기서 클라이언트는 이 CPT 내의 특정 게시물이 특집 게시물인지 여부를 판별하기 위해 체크박스를 켤 수 있습니다.

여기 제 함수의 코드가 있습니다.php를 사용하여 'Products' CPT를 만듭니다.

function products_custom_init() {

    $labels = array(
        'name' => _x('Products', 'post type general name'),
        'singular_name' => _x('Product', 'post type singular name'),
        'add_new' => _x('Add New', 'products'),
        'add_new_item' => __('Add New Product'),
        'edit_item' => __('Edit Product'),
        'new_item' => __('New Product'),
        'view_item' => __('View Product'),
        'search_items' => __('Search Products'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'show_in_nav_menus' => false,
        'query_var' => true,
        'rewrite' => array('slug','pages'),
        'capability_type' => 'post',
        'hierarchical' => true,
        'menu_position' => 5,
        'supports' => array('title','editor','thumbnail','excerpt',)
      );

    register_post_type( 'products' , $args );
}
add_action( 'init', 'products_custom_init' );

그럼 제품 게시물에만 '기능' 메타박스 / 커스텀 필드를 추가하려면 어떻게 해야 하나요?

대단히 고맙습니다,

신시아

커스텀 투고 타입 내에 커스텀 메타 박스를 작성하려면 , 3개의 기능을 사용할 필요가 있습니다.

  1. 투고 편집 화면에서 커스텀 「메타 박스」블록/화면을 작성하는 기능:

  2. 커스텀 메타를 변경/표시하기 위해 입력 필드를 추가하는 기능입니다.

  3. 마지막으로 투고 편집 화면에서 [저장(Save)]를 클릭하면 나머지 투고와 함께 메타를 저장하는 기능입니다.

이 경우 커스텀 체크박스는 다음과 같습니다.

add_action( 'add_meta_boxes_products', 'meta_box_for_products' );
function meta_box_for_products( $post ){
    add_meta_box( 'my_meta_box_custom_id', __( 'Additional info', 'textdomain' ), 'my_custom_meta_box_html_output', 'products', 'normal', 'low' );
}

function my_custom_meta_box_html_output( $post ) {
    wp_nonce_field( basename( __FILE__ ), 'my_custom_meta_box_nonce' ); //used later for security
    echo '<p><input type="checkbox" name="is_this_featured" value="checked" '.get_post_meta($post->ID, 'team_member_title', true).'/><label for="is_this_featured">'.__('Featured Product?', 'textdomain').'</label></p>';
}

add_action( 'save_post_team_member', 'team_member_save_meta_boxes_data', 10, 2 );
function team_member_save_meta_boxes_data( $post_id ){
    // check for nonce to top xss
    if ( !isset( $_POST['my_custom_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['my_custom_meta_box_nonce'], basename( __FILE__ ) ) ){
        return;
    }

    // check for correct user capabilities - stop internal xss from customers
    if ( ! current_user_can( 'edit_post', $post_id ) ){
        return;
    }

    // update fields
    if ( isset( $_REQUEST['is_this_featured'] ) ) {
        update_post_meta( $post_id, 'is_this_featured', sanitize_text_field( $_POST['is_this_featured'] ) );
    }
}

Muhammad Yasin이 말했듯이, 저는 다음과 같은 플러그인을 추천합니다.
http://wordpress.org/extend/plugins/more-fields/

코드로 직접 하고 싶은 경우는, 다음을 봐 주세요.

<?php add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args ); ?>

우편물 종류별로 상자를 등록할 수 있습니다.

이 플러그인을 사용할 수 있습니다.

http://wordpress.org/extend/plugins/types/

또는 이 튜토리얼이 도움이 될 수 있습니다.

http://wptheming.com/2010/08/custom-metabox-for-post-type/

언급URL : https://stackoverflow.com/questions/11740907/how-to-add-custom-field-to-custom-post-type

반응형