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.
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.
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.
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.
Sie haben 3 Möglichkeiten.
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.
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.
Schauen Sie sich das Pods-Framework an , es handelt sich im Grunde genommen um CPTs mit mehr Kontrolle über die DB.