从数据库数据在Wordpress中创建自定义帖子类型

从数据库数据在Wordpress中创建自定义帖子类型,wordpress,custom-post-type,Wordpress,Custom Post Type,我在数据库里有一张桌子,叫做车库,是这样组成的 _____________________________________________ | Brand | Model | Color | Km | -------------------------------------------- | Fiat | Panda | Black | 55448 | -------------------------------------------

我在数据库里有一张桌子,叫做车库,是这样组成的

_____________________________________________
|   Brand   | Model   | Color     | Km      |
--------------------------------------------
| Fiat      | Panda   | Black     | 55448   |
---------------------------------------------
| Opel      | Corsa   | Red       | 441155  |
我想知道我是否可以创建一个自定义的帖子类型来查看这些数据

我创建了自定义帖子类型,代码是

function create_auto_cpt() {

    $labels = array(
        'name' => _x( 'Auto', 'Post Type General Name', 'Auto' ),
        'singular_name' => _x( 'Auto', 'Post Type Singular Name', 'Auto' ),
        'menu_name' => _x( 'Auto', 'Admin Menu text', 'Auto' ),
        'name_admin_bar' => _x( 'Auto', 'Add New on Toolbar', 'Auto' ),
        'archives' => __( 'Archivi Auto', 'Auto' ),
        'attributes' => __( 'Attributi delle Auto', 'Auto' ),
        'parent_item_colon' => __( 'Genitori Auto:', 'Auto' ),
        'all_items' => __( 'Tutti le Auto', 'Auto' ),
        'add_new_item' => __( 'Aggiungi nuova Auto', 'Auto' ),
        'add_new' => __( 'Nuovo', 'Auto' ),
        'new_item' => __( 'Auto redigere', 'Auto' ),
        'edit_item' => __( 'Modifica Auto', 'Auto' ),
        'update_item' => __( 'Aggiorna Auto', 'Auto' ),
        'view_item' => __( 'Visualizza Auto', 'Auto' ),
        'view_items' => __( 'Visualizza le Auto', 'Auto' ),
        'search_items' => __( 'Cerca Auto', 'Auto' ),
        'not_found' => __( 'Nessun Auto trovato.', 'Auto' ),
        'not_found_in_trash' => __( 'Nessun Auto trovato nel cestino.', 'Auto' ),
        'featured_image' => __( 'Immagine in evidenza', 'Auto' ),
        'set_featured_image' => __( 'Imposta immagine in evidenza', 'Auto' ),
        'remove_featured_image' => __( 'Rimuovi immagine in evidenza', 'Auto' ),
        'use_featured_image' => __( 'Usa come immagine in evidenza', 'Auto' ),
        'insert_into_item' => __( 'Inserisci nelle Auto', 'Auto' ),
        'uploaded_to_this_item' => __( 'Caricato in questo Auto', 'Auto' ),
        'items_list' => __( 'Elenco degli Auto', 'Auto' ),
        'items_list_navigation' => __( 'Navigazione elenco Auto', 'Auto' ),
        'filter_items_list' => __( 'Filtra elenco Auto', 'Auto' ),
    );
    $args = array(
        'label' => __( 'Auto', 'Auto' ),
        'description' => __( 'Auto', 'Auto' ),
        'labels' => $labels,
        'menu_icon' => 'dashicons-admin-tools',
        'supports' => array(),
        'taxonomies' => array(),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        'show_in_admin_bar' => true,
        'show_in_nav_menus' => true,
        'can_export' => true,
        'has_archive' => true,
        'hierarchical' => false,
        'exclude_from_search' => false,
        'show_in_rest' => true,
        'publicly_queryable' => true,
        'capability_type' => 'post',
    );
    register_post_type( 'auto', $args );

}
add_action( 'init', 'create_auto_cpt', 0 );
现在我如何用数据库中的数据填充它? 你能帮我吗

创建2个元框的代码

add_action( 'admin_init', 'my_admin' );

function my_admin() {
    add_meta_box( 'Car_review_meta_box',
        'Informazioni Auto',
        'display_Car_review_meta_box',
        'Car_reviews', 'normal', 'high'
    );
}

?>
<?php

function display_Car_review_meta_box( $Car_review ) 
{

    ?>
    <table>
        <tr>
            <td style="width: 50%">Marca</td>
            <td><input type="text" size="40" name="garage" value="" /></td>
        </tr>
        <tr>
            <td style="width: 50%">Modello</td>
            <td><input type="text" size="40" name="garage" value="" /></td>       
        </tr>
    </table>
    <?php
}
?>
add_action('admin_init','my_admin');
函数my_admin(){
添加元框(“汽车评论元框”,
“Informazioni Auto”,
“显示车、查看元框”,
“汽车评论”、“正常”、“高”
);
}
?>
马卡
莫代洛

现在如何用数据库中的数据填充它们?

好的。基于您在上面分享的详细信息,这个工具给了我一点时间进行调试。我希望它能帮助你。我已经优化了代码以获得一些性能

我在数据库中添加了一项,以便我们可以将其用作唯一标识符。见下图。ID自动递增或添加自身

我制作了一个插件,这样停用它就会关闭功能。当然,你可以使插件更好。但是总的来看,

  • 查询自定义帖子类型以查找现有的CPT
  • 如果为空,则DB返回其中的所有汽车,并将它们插入到自定义post类型中
  • 否则,将获取车辆的id进行对比,找出已经作为CPT的车辆,并忽略它们
  • 
    马卡
    
    嗯。基于您在上面分享的详细信息,这个工具给了我一点时间进行调试。我希望它能帮助你。我已经优化了代码以获得一些性能

    我在数据库中添加了一项,以便我们可以将其用作唯一标识符。见下图。ID自动递增或添加自身

    我制作了一个插件,这样停用它就会关闭功能。当然,你可以使插件更好。但是总的来看,

  • 查询自定义帖子类型以查找现有的CPT
  • 如果为空,则DB返回其中的所有汽车,并将它们插入到自定义post类型中
  • 否则,将获取车辆的id进行对比,找出已经作为CPT的车辆,并忽略它们
  • 
    马卡
    

    嗨,迪马加布里,这是可能的。您只需要创建一个新的自定义帖子类型。制作一些自定义元数据库,然后显示此数据。1。您只需要创建一个新的自定义帖子类型:2。制作一些自定义元数据库3。查询数据库4。然后在使用后在元数据库中显示这些数据我在这里看到了类似的实现-如果你添加一些代码,我可以帮助你。好的,我插入代码这是一个很好的进展。现在创建一些自定义元数据库并将它们添加到自定义帖子类型中。由于您的信息已在自定义数据库中,因此您可以跳过此部分的保存。我将帮助编写查询数据库的代码,并将代码放在帖子中。您只需要创建一个新的自定义帖子类型。制作一些自定义元数据库,然后显示此数据。1。您只需要创建一个新的自定义帖子类型:2。制作一些自定义元数据库3。查询数据库4。然后在使用后在元数据库中显示这些数据我在这里看到了类似的实现-如果你添加一些代码,我可以帮助你。好的,我插入代码这是一个很好的进展。现在创建一些自定义元数据库并将它们添加到自定义帖子类型中。由于您的信息已在自定义数据库中,因此您可以跳过此部分的保存。我将帮助编写查询数据库的代码,并将代码放在帖子中。如果这仍然是一个挑战,我们可以通过skype进行排序。好的,它可以工作,但有一个小问题。每次我在后端重新加载CPT页面时,它都会添加2个值​​现在,不确定地增加它们,你可以共享你的
    var\u转储($ids)在这一行之后
    $ids=内爆(“,”,$car\u available\u在\u cpt\u数组中)确定。。我插入代码。。。输出是“2,2,1,2,1,2,2,1,1,2,1,2,1,2”你能不能也用var_dump($results)如果这仍然是一个挑战,我们可以通过skype进行排序。好的,它可以工作,但有一个小问题。每次我在后端重新加载CPT页面时,它都会添加2个值​​现在,不确定地增加它们,你可以共享你的
    var\u转储($ids)在这一行之后
    $ids=内爆(“,”,$car\u available\u在\u cpt\u数组中)确定。。我插入代码。。。输出为“2,2,1,2,1,2,2,1,1,2,1,2,1,2”,您也可以使用var_dump($results)吗
    
    <?php
    /**
     * Plugin Name: Stackoverflow Question
     * Plugin URI: https://omukiguy.com
     * Author: Laurence B.
     * Author URI: https://omukiguy.com
     * Description: Get the cars from the DB and show case on CPT.
     * Version: 0.1.0
     * License: GPL2
     * License URL: http://www.gnu.org/licenses/gpl-2.0.txt
     * text-domain: prefix-plugin-name
    */
    
    function create_auto_cpt() {
    
        $labels = array(
            'name' => _x( 'Auto', 'Post Type General Name', 'plugin-auto-text' ),
            'singular_name' => _x( 'Auto', 'Post Type Singular Name', 'plugin-auto-text' ),
            'menu_name' => _x( 'Auto', 'Admin Menu text', 'plugin-auto-text' ),
            'name_admin_bar' => _x( 'Auto', 'Add New on Toolbar', 'plugin-auto-text' ),
            'archives' => __( 'Archivi Auto', 'plugin-auto-text' ),
            'attributes' => __( 'Attributi delle Auto', 'plugin-auto-text' ),
            'parent_item_colon' => __( 'Genitori Auto:', 'plugin-auto-text' ),
            'all_items' => __( 'Tutti le Auto', 'plugin-auto-text' ),
            'add_new_item' => __( 'Aggiungi nuova Auto', 'plugin-auto-text' ),
            'add_new' => __( 'Nuovo', 'plugin-auto-text' ),
            'new_item' => __( 'Auto redigere', 'plugin-auto-text' ),
            'edit_item' => __( 'Modifica Auto', 'plugin-auto-text' ),
            'update_item' => __( 'Aggiorna Auto', 'plugin-auto-text' ),
            'view_item' => __( 'Visualizza Auto', 'plugin-auto-text' ),
            'view_items' => __( 'Visualizza le Auto', 'plugin-auto-text' ),
            'search_items' => __( 'Cerca Auto', 'plugin-auto-text' ),
            'not_found' => __( 'Nessun Auto trovato.', 'plugin-auto-text' ),
            'not_found_in_trash' => __( 'Nessun Auto trovato nel cestino.', 'plugin-auto-text' ),
            'featured_image' => __( 'Immagine in evidenza', 'plugin-auto-text' ),
            'set_featured_image' => __( 'Imposta immagine in evidenza', 'plugin-auto-text' ),
            'remove_featured_image' => __( 'Rimuovi immagine in evidenza', 'plugin-auto-text' ),
            'use_featured_image' => __( 'Usa come immagine in evidenza', 'plugin-auto-text' ),
            'insert_into_item' => __( 'Inserisci nelle Auto', 'plugin-auto-text' ),
            'uploaded_to_this_item' => __( 'Caricato in questo Auto', 'plugin-auto-text' ),
            'items_list' => __( 'Elenco degli Auto', 'plugin-auto-text' ),
            'items_list_navigation' => __( 'Navigazione elenco Auto', 'plugin-auto-text' ),
            'filter_items_list' => __( 'Filtra elenco Auto', 'plugin-auto-text' ),
        );
        $args = array(
            'label' => __( 'Auto', 'plugin-auto-text' ),
            'description' => __( 'Auto', 'plugin-auto-text' ),
            'labels' => $labels,
            'menu_icon' => 'dashicons-admin-tools',
            'supports' => array(),
            'taxonomies' => array(),
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'menu_position' => 5,
            'show_in_admin_bar' => true,
            'show_in_nav_menus' => true,
            'can_export' => true,
            'has_archive' => true,
            'hierarchical' => false,
            'exclude_from_search' => false,
            'show_in_rest' => true,
            'publicly_queryable' => true,
            'capability_type' => 'post',
        );
        register_post_type( 'auto', $args );
    
    }
    add_action( 'init', 'create_auto_cpt', 0 );
    
    add_action( 'admin_init', 'my_admin' );
    
    function my_admin() {
        add_meta_box( 
            'Car_review_meta_box',
            'Informazioni Auto',
            'display_Car_review_meta_box',
            'auto', // Change the Car_reviews to custom post type = auto because  register_post_type( 'auto', $args );
            'normal', 
            'high'
        );
    }
    
    function display_Car_review_meta_box() 
    {
        ?>
        <table>
            <tr>
                <td style="width: 50%">Marca</td>
                <td><input type="text" size="40" name="garage" value="<?php echo get_post_meta( get_the_ID() , 'model', true ); ?>" /></td>
            </tr>
            <tr>
                <td style="width: 50%">Modello</td>
                <td><input type="text" size="40" name="garage" value="<?php echo get_post_meta( get_the_ID() , 'brand', true ); ?>" /></td>       
            </tr>
            <tr>
                <td style="width: 50%">Color</td>
                <td><input type="text" size="40" name="garage" value="<?php echo get_post_meta( get_the_ID() , 'color', true ); ?>" /></td>       
            </tr>
            <tr>
                <td style="width: 50%">Mileage</td>
                <td><input type="text" size="40" name="garage" value="<?php echo get_post_meta( get_the_ID() , 'km', true ); ?>" /></td>       
            </tr>
        </table>
        <?php
    }
    
    
    add_action( 'wp', 'techiepress_insert_into_cpt');
    
    function techiepress_verify_existing_cars_in_cpt() {
    
        $id_arrays_in_cpt = [];
        // Query all autos
        $args = array(
            'post_type'      => 'auto',
            'posts_per_page' => -1,
        );
    
        $loop = new WP_Query($args);
        while ( $loop->have_posts() ) {
            $loop->the_post();
            $id_arrays_in_cpt[] = get_post_meta( get_the_ID() , 'id', true );
        }
        return $id_arrays_in_cpt;
    }
    
    function techiepress_query_garage_table( $car_available_in_cpt_array ) {
        // Query Database
        global $wpdb;
        $table_name = 'garage'; // If the table has aprefix from WordPress then add $wpdb->prefix . 'garage';
    
        if ( NULL === $car_available_in_cpt_array || empty( $car_available_in_cpt_array ) || 0 === $car_available_in_cpt_array || '0' === $car_available_in_cpt_array) {
            $sql = "SELECT * FROM $table_name";
        } else {
            $ids = implode( ",", $car_available_in_cpt_array);
            $sql = "SELECT * FROM $table_name WHERE id NOT IN ( '$ids' )";
        }
    
        $results = $wpdb->get_results( $sql );
        return $results;
    
    }
    
    function techiepress_insert_into_cpt() {
    
        // if the queried results from dont match the existing autos
        $car_available_in_cpt_array = techiepress_verify_existing_cars_in_cpt();
        $database_results = techiepress_query_garage_table( $car_available_in_cpt_array );
    
        if ( NULL === $database_results || empty( $database_results ) || 0 === $database_results || '0' === $database_results) {
            return;
        }
    
        //Insert into CPT
        foreach( $database_results as $result ) {
             // Create post object
            $car_model = array(
                'post_title'  => wp_strip_all_tags( $result->Model . ' ' . $result->Brand ),
                'meta_input'  => array(
                    'id'         => $result->id,
                    'model'      => $result->Model,
                    'brand'      => $result->Brand,
                    'color'      => $result->Color,
                    'km'         => $result->Km,
                ),
                'post_type'   => 'auto',
                'post_status' => 'publish',
            );
            // Insert the post into the database
            wp_insert_post( $car_model );
        }
    }