This commit is contained in:
2024-11-23 07:10:17 +00:00
parent 79ee268949
commit 6253ab909e

View File

@ -0,0 +1,96 @@
<?php
function create_custom_meta_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'custom_meta_table'; // Table name
// Set the charset and collation
$charset_collate = $wpdb->get_charset_collate();
// SQL to create the table
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
post_id bigint(20) NOT NULL,
custom_field_value varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (id),
KEY post_id (post_id)
) $charset_collate;";
// Include the upgrade file which contains the dbDelta() function
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// Run the SQL to create the table
dbDelta($sql);
}
register_activation_hook(__FILE__, 'create_custom_meta_table');
function add_custom_meta_box() {
add_meta_box(
'custom_meta_box', // ID for the meta box
'Custom Meta Box', // Title of the meta box
'custom_meta_box_callback', // Callback function to display the content
'post', // Post type (you can add other types like 'page' or custom post types)
'normal', // Context (where the meta box appears: normal, side, advanced)
'high' // Priority (high, core, default, low)
);
}
add_action('add_meta_boxes', 'add_custom_meta_box');
function custom_meta_box_callback($post) {
// Add nonce field for security
wp_nonce_field('custom_meta_box_nonce', 'meta_box_nonce');
// Get the current value of the custom field from the database (if any)
$custom_value = get_post_meta($post->ID, '_custom_field', true);
// Display the form field
echo '<label for="custom_field">Custom Field</label>';
echo '<input type="text" id="custom_field" name="custom_field" value="' . esc_attr($custom_value) . '" />';
}
function save_custom_meta_data($post_id) {
// Check if it's an autosave or if the nonce is not valid
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
if (!isset($_POST['meta_box_nonce']) || !wp_verify_nonce($_POST['meta_box_nonce'], 'custom_meta_box_nonce')) return $post_id;
// Check if the user has permission to edit the post
if ('post' != $_POST['post_type'] || !current_user_can('edit_post', $post_id)) return $post_id;
// Get the posted value
$custom_value = isset($_POST['custom_field']) ? sanitize_text_field($_POST['custom_field']) : '';
// Insert or update the custom value in the custom table
global $wpdb;
$table_name = $wpdb->prefix . 'custom_meta_table';
// Check if this post already has an entry in the custom table
$existing_entry = $wpdb->get_var($wpdb->prepare("SELECT id FROM $table_name WHERE post_id = %d", $post_id));
if ($existing_entry) {
// Update the existing row
$wpdb->update(
$table_name,
array('custom_field_value' => $custom_value),
array('post_id' => $post_id),
array('%s'),
array('%d')
);
} else {
// Insert a new row
$wpdb->insert(
$table_name,
array('post_id' => $post_id, 'custom_field_value' => $custom_value),
array('%d', '%s')
);
}
return $post_id;
}
add_action('save_post', 'save_custom_meta_data');