Insérez les données de type de publication personnalisées de WordPress dans la table wp_posts existante.
P粉811329034
2023-07-28 16:24:13
<p>我已經(jīng)創(chuàng)建了一個(gè)插件,可以在WordPress數(shù)據(jù)庫(kù)中的現(xiàn)有wp_posts表上運(yùn)行。為此,我創(chuàng)建了插件的代碼,當(dāng)激活插件時(shí),它會(huì)向現(xiàn)有數(shù)據(jù)庫(kù)添加3個(gè)字段,并在停用插件時(shí)從現(xiàn)有數(shù)據(jù)庫(kù)中刪除這3個(gè)字段。</p><p>這是我布局的屏幕截圖。<br />我希望在在字段中添加值后,當(dāng)我點(diǎn)擊更新時(shí),地址、緯度和經(jīng)度字段將把數(shù)據(jù)顯示到數(shù)據(jù)庫(kù)中。</p><p>以下是代碼:</p><p><br /></p>
<pre class="brush:php;toolbar:false;"><?php
/**
* Plugin Name: Hello World
* Plugin URI: https://example.com/my-plugin
* Description: This is a description of my hello world sample plugin.
* Version: 2.3.1
* Author: Selin
* Author URI: https://example.com
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
include_once WP_PLUGIN_DIR . '/form-data/connection.php';
include_once(__DIR__. 'AdminStorecreatefile.php');
include_once(__DIR__ . 'AdminStoreview.php');
//global $post;
function db_activate() {
global $wpdb;
$table = $wpdb->prefix . 'posts';
$charset_collate = $wpdb->get_charset_collate();
$sql = "ALTER TABLE $table
ADD `address` VARCHAR(255) NOT NULL,
ADD `longitude` VARCHAR(20) NOT NULL,
ADD `latitude` VARCHAR(20) NOT NULL
;";
$wpdb->query($sql);
$wpdb->get_results("DESCRIBE $table");
}
register_activation_hook(__FILE__, 'db_activate');
function db_deactivate() {
global $wpdb;
$table = $wpdb->prefix . 'posts';
$sql = "ALTER TABLE $table DROP COLUMN `address`, DROP COLUMN `longitude`, DROP COLUMN `latitude`";
$wpdb->query($sql);
}
register_deactivation_hook(__FILE__, 'db_deactivate');
// custom-post-type
function custom_store_metaboxes() {
add_meta_box(
'store_location',
'Store Location',
'display_store',
'store',
'normal',
'high'
);
}
function display_store($post) {
// Get existing address, latitude, and longitude values (if any)
$address = get_post_meta($post->ID, 'address', true);
$latitude = get_post_meta($post->ID, 'latitude', true);
$longitude = get_post_meta($post->ID, 'longitude', true);
?>
<label for="address">Address:</label><br>
<input type="text" id="address" name="address" value="<?php echo esc_attr($address); ?>"/><br><br>
<label for="latitude">Latitude:</label><br>
<input type="text" name="latitude" id="latitude" value="<?php echo esc_attr($latitude); ?>" /><br><br>
<label for="longitude">Longitude:</label><br>
<input type="text" name="longitude" id="longitude" value="<?php echo esc_attr($longitude); ?>" /><br><br>
<?php
}
function save_store_location_fields($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Insert or update the address
if (isset($_POST['address'])) {
update_post_meta($post_id, 'address', sanitize_text_field($_POST['address']));
}
// Insert or update the latitude
if (isset($_POST['latitude'])) {
update_post_meta($post_id, 'latitude', sanitize_text_field($_POST['latitude']));
}
// Insert or update the longitude
if (isset($_POST['longitude'])) {
update_post_meta($post_id, 'longitude', sanitize_text_field($_POST['longitude']));
}
}
add_action('save_post_store', 'save_store_location_fields');
//wp_insert_post($address,$latitude,$longitude);
add_action('add_meta_boxes_store', 'custom_store_metaboxes');
//add_action('save_post_store', 'save_store_location_fields');
function register_custom_store_post_type() {
$labels = array(
'name' => _x( 'Store Locator', 'Post type general name', 'textdomain' ),
'singular_name' => _x( 'Store', 'Post type singular name', 'textdomain' ),
'menu_name' => _x( 'Stores', 'Admin Menu text', 'textdomain' ),
'name_admin_bar' => _x( 'Store', 'Add New on Toolbar', 'textdomain' ),
'add_new' => __( 'Add New', 'textdomain' ),
'add_new_item' => __( 'Add New Store', 'textdomain' ),
'new_item' => __( 'New Store', 'textdomain' ),
'edit_item' => __( 'Edit Store', 'textdomain' ),
'view_item' => __( 'View Store', 'textdomain' ),
'all_items' => __( 'All Stores', 'textdomain' ),
'search_items' => __( 'Search Stores', 'textdomain' ),
'parent_item_colon' => __( 'Parent Stores:', 'textdomain' ),
'not_found' => __( 'No stores found.', 'textdomain' ),
'not_found_in_trash' => __( 'No stores found in Trash.', 'textdomain' ),
'featured_image' => _x( 'Store Cover Image', 'Overrides the “Featured Image” phrase for this post type. Added in 4.3', 'textdomain' ),
'set_featured_image' => _x( 'Set cover image', 'Overrides the “Set featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
'remove_featured_image' => _x( 'Remove cover image', 'Overrides the “Remove featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
'use_featured_image' => _x( 'Use as cover image', 'Overrides the “Use as featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
'archives' => _x( 'Store archives', 'The post type archive label used in nav menus. Default “Post Archives”. Added in 4.4', 'textdomain' ),
'insert_into_item' => _x( 'Insert into store', 'Overrides the “Insert into post”/”Insert into page” phrase (used when inserting media into a post). Added in 4.4', 'textdomain' ),
'uploaded_to_this_item' => _x( 'Uploaded to this store', 'Overrides the “Uploaded to this post”/”Uploaded to this page” phrase (used when viewing media attached to a post). Added in 4.4', 'textdomain' ),
'filter_items_list' => _x( 'Filter stores list', 'Screen reader text for the filter links heading on the post type listing screen. Default “Filter posts list”/”Filter pages list”. Added in 4.4', 'textdomain' ),
'items_list_navigation' => _x( 'Stores list navigation', 'Screen reader text for the pagination heading on the post type listing screen. Default “Posts list navigation”/”P(pán)ages list navigation”. Added in 4.4', 'textdomain' ),
'items_list' => _x( 'Stores list', 'Screen reader text for the items list heading on the post type listing screen. Default “Posts list”/”P(pán)ages list”. Added in 4.4', 'textdomain' ),
);
$args = array(
'labels' => $labels,
'description' => 'Store custom post type.',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'store' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 10,
'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ),
'menu_icon' => 'dashicons-location',
'show_in_rest' => true,
'register_meta_box_cb' => 'custom_store_metaboxes'
);
register_post_type('store', $args);
}
add_action('init', 'register_custom_store_post_type');
?></pre>
<p>我想要在地址、緯度和經(jīng)度字段中插入記錄,請(qǐng)幫我編寫(xiě)這部分代碼。</p>
Les sonnettes d’alarme sonnaient fort dans ma tête. Veuillez ne pas ajouter de colonnes aux tables principales. pourquoi ?
Les mises à jour de la version principale (telles que les prochaines mises à jour 6.2.2 à 6.3) ramèneront la structure des tables principales à la norme. Les mises à jour principales échoueront ou vous aideront à supprimer les colonnes supplémentaires.
Core dispose d'un sous-système de mise en cache qui gère les métadonnées comme les v?tres, stockées dans la table wp_postmeta. Vous pouvez en profiter et bénéficier d’avantages en termes de performances.
L'écosystème WordPress regorge de code (core, plugins, thèmes) qui utilise ces tables. Par exemple, il existe des milliers de plugins dans le référentiel de plugins. Il n’existe aucune norme quant à l’exactitude de ce code autre que son fonctionnement. Vous rencontrerez du code qui suppose qu'il sait quelles colonnes se trouvent dans la table posts et fait des choses étranges lorsque d'autres colonnes sont présentes. J'essaie d'être poli ici. La vérité est que l’écosystème WordPress contient de nombreux mauvais codes fondamentalement utilisables. En faisant quelque chose d'aussi étrange que d'ajouter une colonne à une table principale, vous allez introduire ces problèmes avec du mauvais code.
Quelqu'un a souligné dans les commentaires que la table wp_postmeta est l'endroit où vos données sont stockées. c'est exact. Vous le faites déjà avec update_post_meta(), ce qui est fondamentalement correct.
D'ailleurs, la convention pour les plugins WordPress est de supprimer les données supplémentaires lorsque le plugin est supprimé, pas lorsqu'il est désactivé.
Comme +0
P粉811329034
répondre