您应该避免创建更多的表。如果你真的有理由这么做,就这么做吧。请注意wp_postmeta
可以存储几乎任何类型的数据,只需使用get_post_meta
在大多数情况下,函数可以完成所有工作。
但是如果您必须使用另一张表,并且通常使用它,那么您正在寻找save_post
和delete_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 ...");
}
当然,您可以使用上面的代码进行更多验证。