it-swarm.com.de

Benutzerdefinierter Beitragstyp mit Eingabefeldern zum Trennen der Tabelle in der Datenbank.

Momentan verwende ich einen benutzerdefinierten Beitragstyp namens "Orte". Ich möchte Eingabefelder in den benutzerdefinierten Beitragstyp einfügen können, in denen Informationen wie Adresse, Typ, Telefonnummer usw. gespeichert werden Eine separate Tabelle namens "Marker" Wenn ein neuer Beitrag erstellt wird, wird ein neuer Eintrag in den Tabellenmarkern aus den folgenden Eingabefeldern erstellt/aktualisiert oder entfernt, wenn der Beitrag geändert oder gelöscht wird.

Ich bin mir nicht sicher, wo ich anfangen soll, diese zu verknüpfen, damit sie so funktionieren. Ich weiß, wie man eine insert.php-Datei erstellt, um neue Speicherorte hinzuzufügen und eine Datenbank zu erstellen, aber nicht mit WordPress. Ich entschuldige mich, bin aber ziemlich neu in SQL und PHP.

4
espnicholas

Sie sollten vermeiden, weitere Tabellen zu erstellen. Tu es einfach, wenn du wirklich einen guten Grund dafür hast. Beachten Sie, dass wp_postmeta praktisch jede Art von Daten speichern kann und in den meisten Fällen die Verwendung der Funktion get_post_meta den gesamten Vorgang erledigen kann.

Aber wenn Sie müssen eine andere Tabelle verwenden und diese allgemein nehmen, suchen Sie nach den save_post und delete_post Hooks.

Benutzerdefinierte Felder replizieren

Da Sie benutzerdefinierte Felder erwähnen, würden Sie Folgendes tun, wenn Sie replizieren die Informationen von wp_postmeta in eine andere Tabelle kopieren möchten:

add_action('save_post', 'save_markers');
function save_markers($post_id) {
    global $wpdb;
    $marker = get_post_meta($post_id, 'marker_custom_field', true);
    // go and put $marker on the markers table
    $wpdb->query("INSERT INTO markers ...");
}

Das obige gilt auch für den delete_post hook.

Metaboxen

Aber, wenn Sie die Informationen direkt auf der anderen Tabelle speichern möchten, passt vielleicht Metaboxen besser zu Ihnen.

add_action( 'add_meta_boxes', 'marker_add_meta_box');
function marker_add_meta_box() {
    add_meta_box( 
        'marker_metabox',
        __('Marker Title', 'your-plugin-textdomain'),
        'marker_metabox',
        'post' 
    );
}

function marker_metabox ($post) {
    wp_nonce_field(plugin_basename( __FILE__ ), 'your-plugin-texdomain');
    $marker = get_marker_from_another_table();
    ?>
    <label for="marker_field">
        <?php _e('Marker field description', 'your-plugin-texdomain'); ?>
    </label>
    <input type="text" id="marker_field" name="marker_field" value="<?php echo $marker; ?>" size="25" />
    <?php
}

Und dann zum Speichern:

add_action('save_post', 'save_markers');
function save_markers ($post_id) {
    if (defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE) 
        return;
    if ('locations' != $_POST['post_type'])
        return;
    if (!current_user_can( 'edit_post', $post_id ))
        return;

    /* Here you have $marker and $post_id, then you can just
       do the reference in your markers table. */

    global $wpdb;

    $marker = $_POST['marker_field'];
    $wpdb->query("INSERT INTO markers VALUES ...");

}

Und natürlich können Sie mit dem obigen Code weitere Überprüfungen durchführen.

5
vmassuchetto

Sie haben 3 Möglichkeiten.

  1. Verwenden Sie einfach die nativen benutzerdefinierten Felder in WordPress, es sei denn, Sie haben einen triftigen Grund, dies nicht zu tun. Sie passen gut zu Ihnen und funktionieren perfekt mit benutzerdefinierten Beitragstypen.

    http://codex.wordpress.org/Custom_Fields

  2. Erstellen Sie Ihre eigenen benutzerdefinierten Felder und binden Sie sie mit wpdb in Ihr CPT ein. Sie benötigen einen guten Grund, dies zu tun, anstatt option1 zu verwenden.

    http://codex.wordpress.org/Class_Reference/wpdb

  3. Schauen Sie sich das Pods-Framework an , es handelt sich im Grunde genommen um CPTs mit mehr Kontrolle über die DB.

0
Wyck