如何在不使用任何插件的情况下实现自定义字段?

时间:2015-12-13 作者:Mac organo

我正在尝试创建一个成员目录并使用自定义的post类型成员。我对如何使用ACF插件很熟悉,但有没有什么方法可以将特定自定义帖子类型的自定义字段关联到一个简单的输入框,如电话号码和地址?

2 个回复
最合适的回答,由SO网友:Carl Alberto 整理而成

如果您不想使用插件,可以尝试实现一个元框来与该自定义帖子类型相关联,这是我在为某个帖子类型添加简单输入字段时使用的代码,在下面的示例中,我假设member_post_type 是您声明的帖子类型:

function member_add_meta_box() {
//this will add the metabox for the member post type
$screens = array( \'member_post_type\' );

foreach ( $screens as $screen ) {

    add_meta_box(
        \'member_sectionid\',
        __( \'Member Details\', \'member_textdomain\' ),
        \'member_meta_box_callback\',
        $screen
    );
 }
}
add_action( \'add_meta_boxes\', \'member_add_meta_box\' );

/**
 * Prints the box content.
 *
 * @param WP_Post $post The object for the current post/page.
 */
function member_meta_box_callback( $post ) {

// Add a nonce field so we can check for it later.
wp_nonce_field( \'member_save_meta_box_data\', \'member_meta_box_nonce\' );

/*
 * Use get_post_meta() to retrieve an existing value
 * from the database and use the value for the form.
 */
$value = get_post_meta( $post->ID, \'_my_meta_value_key\', true );

echo \'<label for="member_new_field">\';
_e( \'Phone Number\', \'member_textdomain\' );
echo \'</label> \';
echo \'<input type="text" id="member_new_field" name="member_new_field" value="\' . esc_attr( $value ) . \'" size="25" />\';
}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
 function member_save_meta_box_data( $post_id ) {

 if ( ! isset( $_POST[\'member_meta_box_nonce\'] ) ) {
    return;
 }

 if ( ! wp_verify_nonce( $_POST[\'member_meta_box_nonce\'], \'member_save_meta_box_data\' ) ) {
    return;
 }

 if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
    return;
 }

 // Check the user\'s permissions.
 if ( isset( $_POST[\'post_type\'] ) && \'page\' == $_POST[\'post_type\'] ) {

    if ( ! current_user_can( \'edit_page\', $post_id ) ) {
        return;
    }

 } else {

    if ( ! current_user_can( \'edit_post\', $post_id ) ) {
        return;
    }
 }

 if ( ! isset( $_POST[\'member_new_field\'] ) ) {
    return;
 }

 $my_data = sanitize_text_field( $_POST[\'member_new_field\'] );

 update_post_meta( $post_id, \'_my_meta_value_key\', $my_data );
}
add_action( \'save_post\', \'member_save_meta_box_data\' );

Additional Resources for the WordPress Metaboxes:

请参阅文档here

SO网友:Pieter Goosen

正如我在评论中所说的,

Custom fields 已经是内置功能。您只需在注册自定义帖子类型时添加对它的支持;-)

这里有两个选项:

当你register your custom post type, 只需添加custom-fieldssupports 参数

示例:

add_action( \'init\', \'codex_custom_init\' );
function codex_custom_init() {
    $args = [
      \'public\' => true,
      \'label\'  => \'Books\',
      \'supports\' => [\'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'custom-fields\']
    ];
    register_post_type( \'book\', $args );
}
您只需使用add_post_type_support() 向自定义帖子类型添加自定义字段的步骤

示例:

add_action( \'init\', \'wpcodex_add_custom_fileds_support_for_cpt\', 11 );
function wpcodex_add_custom_fileds_support_for_cpt() {
    add_post_type_support( \'cpt\', \'custom-fields\' ); // Change cpt to your post type
}

相关推荐

自定义Post-type未返回正确的Child_Of

Situation我正在使用高级自定义字段插件为自定义帖子类型设置一个复选框。如果选中此框,则此查询应返回该框。到目前为止,查询工作正常。The issue我希望它显示的页面都是一个页面的子页面。这个查询返回带有复选框的所有页面,而不是只返回带有复选框的当前页面的子页面。My code页面顶部<?php $tid = get_the_ID(); ?> 沿着页面进一步<?php $i == 0; global $post; $myposts =