GOOGLE ADS

Freitag, 15. April 2022

Erstellen Sie benutzerdefinierte Beitragstypen in Wordpress aus Datenbankdaten

Ich habe eine Tabelle in der Datenbank namens Garage, die so aufgebaut ist

_____________________________________________
| Brand | Model | Color | Km |
--------------------------------------------
| Fiat | Panda | Black | 55448 |
---------------------------------------------
| Opel | Corsa | Red | 441155 |

Ich würde gerne wissen, ob ich einen benutzerdefinierten Beitragstyp erstellen kann, um diese Daten anzuzeigen.

Ich habe den benutzerdefinierten Beitragstyp erstellt, der Code lautet

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

Wie gehe ich nun vor, um es mit den Daten in der Datenbank zu füllen? Können Sie mir helfen?

Code zum Erstellen von 2 Metaboxen.

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
}
?>

now how can I populate them with data from the database?


Lösung des Problems

In Ordnung. Basierend auf den Details, die Sie oben geteilt haben, hat dieses Tool etwas Zeit zum Debuggen. Ich hoffe es hilft dir. Ich habe den Code optimiert, um etwas Leistung zu haben.

Ich habe Ihrer Datenbank ein Element hinzugefügt, damit wir es als eindeutige Kennung verwenden können. Siehe Bild unten. Die ID wird automatisch erhöht oder hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Ich habe ein Plugin erstellt, damit das Deaktivieren die Funktionalität ausschaltet. Natürlich kann man das Plugin noch besser machen. Aber die Gesamtidee,

  • Sie fragen den benutzerdefinierten Beitragstyp ab, um das bestehende CPTS zu finden,

  • Wenn es leer ist, gibt DB alle darin enthaltenen Autos zurück und fügt sie in den benutzerdefinierten Beitragstyp ein

  • Andernfalls wird die ID der Autos verglichen, um diese bereits als CPTs zu finden, und sie werden ignoriert.

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

    Code getestet und funktioniert.

    Keine Kommentare:

    Kommentar veröffentlichen

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...