4

请帮助我.. 我是 wordpress 的新手,我用字段的 custom_meta_box 创建了一个自定义帖子(位置,着装)

因此,在我的自定义帖子列表中,我想查看我在 custom_meta_box 上创建的值。

这是我当前的代码:

    /*
    插件名称:我自己的自定义帖子
    插件 URI:http://www.mywebsite.com/firstPlugin/
    描述:我的样本描述
    作者:蒙斯基
    版本:1.0
    作者 URI:http://www.mywebsite.com/
    */


    // 注册新的帖子类型和分类
    函数 wpt_event_posttype() {
        register_post_type('事件',
            大批(
                '标签' => 数组(
                    '名称' => __( '事件' ),
                    'singular_name' => __( '事件' ),
                    'add_new' => __('添加新事件'),
                    'add_new_item' => __('添加新事件'),
                    'edit_item' => __( '编辑事件' ),
                    'new_item' => __( '添加新事件' ),
                    'view_item' => __('查看事件'),
                    'search_items' => __( '搜索事件' ),
                    'not_found' => __('未找到事件'),
                    'not_found_in_trash' => __( '没有在垃圾箱中找到事件' )
                ),
                '公共' => 真的,
                '支持' => 数组('title', 'editor', 'thumbnail', 'comments'),
                'capability_type' => '发布',
                'rewrite' => array("slug" => "events"), // 永久链接格式
                'menu_position' => 5,
                'register_meta_box_cb' => 'add_events_metaboxes'
            )
        );
    }
    add_action('init', 'wpt_event_posttype');

    函数 add_events_metaboxes() {
       // add_meta_box('wpt_events_date', '事件日期', 'wpt_events_date', 'events', 'side', 'default');
        add_meta_box('wpt_events_location', '事件位置', 'wpt_events_location', '事件', '正常', '高');
    }

    add_action('add_meta_boxes', 'add_events_metaboxes');

    函数 wpt_events_location() {
        全球 $post;
        // Noncename 需要验证数据的来源
        回声'';
        // 如果已经输入,则获取位置数据
            $location = get_post_meta($post->ID, '_location', true);
            $dresscode = get_post_meta($post->ID, '_dresscode', true);
        // 回显字段
            回声'

输入位置:

'; 回声''; 回声'

人们应该如何着装?

'; 回声''; } 函数 wpt_save_events_meta($post_id, $post) { // 验证这来自我们的屏幕并具有适当的授权, // 因为save_post可以在其​​他时间触发 if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) { 返回 $post->ID; } // 是否允许用户编辑帖子或页面? if ( !current_user_can( 'edit_post', $post->ID )) 返回 $post->ID; // OK,我们通过了身份验证:我们需要找到并保存数据 // 我们将它放入一个数组中以使其更容易循环。 $events_meta['_location'] = $_POST['_location']; $events_meta['_dresscode'] = $_POST['_dresscode']; // 添加 $events_meta 的值作为自定义字段 foreach ($events_meta as $key => $value) { // 循环遍历 $events_meta 数组! if( $post->post_type == 'revision' ) 返回;// 不要两次存储自定义数据 $value = implode(',', (array)$value); // 如果 $value 是一个数组,则将其设为 CSV(不太可能) if(get_post_meta($post->ID, $key, FALSE)) { // 如果自定义字段已经有值 update_post_meta($post->ID, $key, $value); } else { // 如果自定义字段没有值 add_post_meta($post->ID, $key, $value); } if(!$value) delete_post_meta($post->ID, $key); // 如果为空则删除 } } add_action('save_post', 'wpt_save_events_meta', 1, 2); // 保存自定义字段
4

3 回答 3

2

您想使用get_post_meta函数。这将提供值并允许您在页面/帖子模板中显示它。

希望这篇文章也有助于了解整个过程。

于 2012-09-03T13:03:06.927 回答
1

用该代码更新您的代码,它对我有用。我更喜欢使用 ACF(高级自定义字段),但最好学习如何元框。使用繁重的代码可以更好地了解您的知识

add_action('init','wpt_event_posttype');
add_action('save_post','save_event_data');


function add_events_metaboxes(){
    add_meta_box('events',esc_html__('Info'), 'events_callback', 'events', 'normal', 'default', null);
}


//Events Callback function Meta_Box
function events_callback($post){
    wp_nonce_field('save_event_data','event_nonce');

    $location = get_post_meta($post->ID,'_event_location_key',true);
    echo '<label for="event_location_field" style="display:block">Location</label></br>';
    echo '<input type="text" id="event_location_field" name="event_location_field" style="width:400px" value="'. esc_attr__($location).'"/></br>';

    $dresscode = get_post_meta($post->ID,'_event_dresscode_key',true);
    echo '<label for="event_dresscode_field" style="display:block">Dresscode</label></br>';
    echo '<input type="text" id="event_dresscode_field" name="event_dresscode_field" style="width:400px" value=" '. esc_attr__($dresscode). '" /></br>';

}
function save_event_data($post_id){
    if (!isset($_POST['event_nonce'])
        || ! wp_verify_nonce($_POST['event_nonce'],'save_event_data')
        || ! isset($_POST['event_location_field'])
        || ! isset($_POST['event_dresscode_field'])){
        return;
    }
    $event_location = sanitize_text_field($_POST['event_location_field']);
    update_post_meta($post_id,'_event_location_key',$event_location);

    $event_dresscode = sanitize_text_field($_POST['event_dresscode_field']);
    update_post_meta($post_id,'_event_dresscode_key',$event_dresscode);
}

并为您的 html 使用此代码

<?php 
     $location = get_post_meta(get_the_ID(),'_event_location_key') ; 
     $dresscode = get_post_meta(get_the_ID(),'_event_dresscode_key');
?>

echo $location[0];
echo $dresscode[0];

于 2019-06-28T13:51:57.447 回答
-1

我建议你使用下面的插件。使用 ACF,您可以为自定义帖子类型创建自定义字段。

https://wordpress.org/plugins/advanced-custom-fields/

于 2018-06-21T14:05:12.187 回答