自定义帖子类型的自定义字段

时间:2016-11-04 作者:Demyd Ganenko

我正在创建插件,无法理解如何添加自定义字段,如WooCommerce中的选择、输入、文本区域等。

我说的不是WP自定义字段。我已向注册自定义邮件类型register_post_type 带参数的函数:

\'capability_type\' => \'post\',
\'supports\' => array(
    \'title\',
    \'custom-fields\'
)
现在我只有TitleCustom fields. 如何将一些自定义输入/选择/单选按钮添加到Edit %custom_post_type%

3 个回复
最合适的回答,由SO网友:Benoti 整理而成

您需要为创建的自定义帖子类型添加自己的metabox。您可以使用操作add_meta_boxes_{cpt_slug}

add_action( \'add_meta_boxes_\' . $cpt_public_slug, \'adding_custom_meta_boxes\' );
add_action( \'save_post\', \'save_metabox\' , 10, 2 );

function adding_custom_meta_boxes(){
    global $cpt_public_slug;
    add_meta_box(
        \'plugin-site\',
        __( \'Website\', \'text_domain\' ),
        \'cpt_form_site_Render\',
        $cpt_public_slug,
        \'normal\',
        \'high\'
    );
}

function cpt_form_site_Render(){
    global $post;

    $post_meta = get_post_meta($post->ID); 

    // render the input field
    ?>
     <input type="text" name="meta_key" value="<?php echo $post_meta[\'meta_value\'][0]; ?>"/>
    <?php
    // do it for all your metas
}

function save_metabox($post_id, $post){

    foreach ($_POST as $the_posted_key=>$the_posted_value) {
        if (strpos($the_posted_key, brozzme_passport_config::$custom_fields_prefix)!==false) {
            update_post_meta($post_id, $the_posted_key, $the_posted_value);
        }
    }
}

SO网友:lavekyl

使用高级自定义字段插件向自定义帖子类型添加一些其他字段。它在插件目录中是免费的,在网站上有很多例子。

插件页面:https://wordpress.org/plugins/advanced-custom-fields/

网站:https://www.advancedcustomfields.com/

SO网友:pptigra

有一个有效的例子。我用它来创建bbpress自定义元数据库

$cpt_public_slug = \'topic\';

add_action( \'add_meta_boxes_\' . $cpt_public_slug, \'adding_custom_meta_boxes\' );
add_action( \'save_post\', \'save_metabox\' , 10, 2 );
add_action( \'publish_\'.$cpt_public_slug, \'save_metabox\' , 10, 2 );

function adding_custom_meta_boxes(){
    global $cpt_public_slug;
    add_meta_box(\'topictimeout\', \'Time\', \'cpt_form_site_Render\', $cpt_public_slug, \'side\', \'high\');
}

function cpt_form_site_Render(){
    global $post;
    $post_meta = get_post_meta($post->ID); 
   // put here input or textarea 
 }

function save_metabox($post_id, $post){
    global $post;
// when first publish and then save
    if( isset( $_POST[\'save\'] ) || isset( $_POST[\'publish\'] ) ) {

        // you will need to use a $_POST param and validate before saving
        $meta_val = isset( $_POST[\'topictimeout\'] ) ? sanitize_text_field( $_POST[\'topictimeout\'] ) : \'\';
        // the $meta_val would be a $_POST param from inner meta box form
        update_post_meta($post_id, \'topictimeout\', $meta_val);
    }

}
您可以将此输入放在那里,例如:

<input type="text" name="topictimeout" value="<?=$post_meta[\'topictimeout\'][0]; ?>"/> in minutes

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: