自定义帖子类型与输入字段,以分隔数据库上的表。

时间:2012-08-13 作者:espnicholas

目前,我正在使用一个名为“locations”的自定义post类型,我希望能够将输入字段放入自定义post类型中,以存储信息,例如(地址、类型、电话号码等)在一个名为“markers”的单独表中,因此当创建一篇新文章时,它将从以下输入字段在表标记中创建一个新条目/当文章被更改或删除时,它可以更新或删除。

我不知道从哪里开始将这些链接在一起以这样的方式工作,我知道如何插入。php文件来添加新位置和创建数据库,但不能以这种方式使用wordpress。很抱歉,我对SQL和PHP还很陌生。

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

您应该避免创建更多的表。如果你真的有理由这么做,就这么做吧。请注意wp_postmeta 可以存储几乎任何类型的数据,只需使用get_post_meta 在大多数情况下,函数可以完成所有工作。

但是如果您必须使用另一张表,并且通常使用它,那么您正在寻找save_postdelete_post 挂钩。

复制自定义字段

因为您提到了自定义字段,如果您想复制wp_postmeta 对于另一个表,您可以执行以下操作:

add_action(\'save_post\', \'save_markers\');
function save_markers($post_id) {
    global $wpdb;
    $marker = get_post_meta($post_id, \'marker_custom_field\', true);
    // go and put $marker on the markers table
    $wpdb->query("INSERT INTO markers ...");
}
上述规定也适用于delete_post

Metaboxes,但是,如果要将信息直接存储在另一个表上,可能metaboxes 更适合你。

add_action( \'add_meta_boxes\', \'marker_add_meta_box\');
function marker_add_meta_box() {
    add_meta_box( 
        \'marker_metabox\',
        __(\'Marker Title\', \'your-plugin-textdomain\'),
        \'marker_metabox\',
        \'post\' 
    );
}

function marker_metabox ($post) {
    wp_nonce_field(plugin_basename( __FILE__ ), \'your-plugin-texdomain\');
    $marker = get_marker_from_another_table();
    ?>
    <label for="marker_field">
        <?php _e(\'Marker field description\', \'your-plugin-texdomain\'); ?>
    </label>
    <input type="text" id="marker_field" name="marker_field" value="<?php echo $marker; ?>" size="25" />
    <?php
}
然后,为了保存它:

add_action(\'save_post\', \'save_markers\');
function save_markers ($post_id) {
    if (defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE) 
        return;
    if (\'locations\' != $_POST[\'post_type\'])
        return;
    if (!current_user_can( \'edit_post\', $post_id ))
        return;

    /* Here you have $marker and $post_id, then you can just
       do the reference in your markers table. */

    global $wpdb;

    $marker = $_POST[\'marker_field\'];
    $wpdb->query("INSERT INTO markers VALUES ...");

}
当然,您可以使用上面的代码进行更多验证。

SO网友:Wyck

您有3个选项。

只需使用WordPress中的本地自定义字段,除非你有充分的理由不这样做,否则它们会很适合你,并且可以完美地处理自定义帖子类型。

http://codex.wordpress.org/Custom_Fields

http://codex.wordpress.org/Class_Reference/wpdb

pods framework, 它基本上是CPT,对DB有更多的控制。

SO网友:user111990

INSERT INTO `wp_postmeta` (post_id, meta_key, meta_value) VALUES (*ID*, \'translation\', *VALUE*;
其中,ID是要附加值的帖子的ID,value是“translation”字段的元值。

就像我说的,可行。。。但是,您需要为每个帖子提供一个单独的插入查询。如果需要,您可以将所有这些内容转储到一个文本文件中,并一次性运行整个集合,否则可能需要与通过WordPress UI添加键一样多的时间。

结束

相关推荐

Switching database on the fly

我读过here 关于使用动态切换当前wp数据库$wpdb->select(\'database_name\'); 一旦完成,我理解我将不得不向原始数据库发出相同的语句。问题:更改数据库后,我是否需要刷新缓存或类似的东西才能正常工作?我需要再次呼叫WP标头吗?潜在问题?