WordPress의 사용자 정의 게시물 유형 데이터를 기존 wp_posts 테이블에 삽입합니다.
P粉811329034
P粉811329034 2023-07-28 16:24:13
0
1
305

我已经创建了一个插件,可以在WordPress数据库中的现有wp_posts表上运行。为此,我创建了插件的代码,当激活插件时,它会向现有数据库添加3个字段,并在停用插件时从现有数据库中删除这3个字段。

这是我布局的屏幕截图。
我希望在在字段中添加值后,当我点击更新时,地址、纬度和经度字段将把数据显示到数据库中。

以下是代码:


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); ?> 








_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”/”Pages 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”/”Pages 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'); ?>

我想要在地址、纬度和经度字段中插入记录,请帮我编写这部分代码。

P粉811329034
P粉811329034

모든 응답 (1)
P粉393030917

내 머릿속에는 알람벨이 요란하게 울리고 있었다. 핵심 테이블에 열을 추가하지 마십시오. 왜?

핵심 버전 업데이트(예: 향후 6.2.2~6.3 업데이트)는 핵심 테이블의 구조를 표준으로 되돌립니다. 핵심 업데이트가 실패하거나 추가 열을 삭제하는 데 도움이 됩니다.

Core에는 wp_postmeta 테이블에 저장된 것과 같은 메타데이터를 처리하는 캐싱 하위 시스템이 있습니다. 이를 활용하고 성능상의 이점을 얻을 수 있습니다.

WordPress 생태계는 이러한 테이블을 사용하는 코드(코어, 플러그인, 테마)로 가득 차 있습니다. 예를 들어, 플러그인 저장소에는 수천 개의 플러그인이 있습니다. 이 코드의 정확성에 대한 표준은 작동 여부 외에는 없습니다. post 테이블에 어떤 열이 있는지 알고 있다고 가정하고 다른 열이 있을 때 이상한 작업을 수행하는 코드를 만나게 됩니다. 나는 여기서 예의를 갖추려고 노력하고 있습니다. 사실 WordPress 생태계에는 기본적으로 사용 가능한 잘못된 코드가 많이 포함되어 있습니다. 핵심 테이블에 열을 추가하는 등 이상한 작업을 수행하면 잘못된 코드로 인해 이러한 문제가 발생하게 됩니다.

누군가가 댓글에서 wp_postmeta 테이블이 데이터가 저장되는 곳이라고 지적했습니다. 좋아요. 기본적으로 올바른 update_post_meta()를 사용하여 이미 수행하고 있습니다.

그런데 WordPress 플러그인의 규칙은 플러그인이 비활성화될 때가 아니라 플러그인이 삭제될 때 추가 데이터를 삭제하는 것입니다.

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!