Pour le moment, j'utilise un type de message personnalisé appelé "emplacements". J'aimerais pouvoir insérer des champs de saisie dans le type de message personnalisé qui stockerait les informations telles que (adresse, type, numéro de téléphone, etc.) dans une table séparée appelée 'marqueurs' Ainsi, lorsqu'un nouveau message est créé, il crée une nouvelle entrée dans les marqueurs de tableau à partir des champs de saisie suivants/peut être mis à jour ou supprimé lorsque le message est modifié ou supprimé.
Je ne sais pas trop par où commencer pour que ces liens fonctionnent ensemble, je sais comment créer un fichier insert.php pour ajouter de nouveaux emplacements et créer une base de données, mais pas avec WordPress de cette manière. Mes excuses, mais je suis assez nouveau pour SQL et PHP.
Vous devriez éviter de créer plus de tables. Faites-le si vous avez vraiment une bonne raison de le faire. Notez que wp_postmeta
peut stocker pratiquement n'importe quel type de données et que, simplement, utiliser la fonction get_post_meta
peut faire tout le travail dans la plupart des cas.
Mais si vous devez utilisez une autre table et que, généralement, vous recherchez le save_post
et delete_post
hooks.
Parce que vous mentionnez des champs personnalisés, si vous voulez replicate les informations de wp_postmeta
dans une autre table, vous feriez quelque chose comme:
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 ...");
}
Ce qui précède s’applique également au hook delete_post
.
Mais si vous voulez stocker les informations directement sur l’autre table, peut-être que métaboxes vous convient mieux.
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
}
Et puis, pour le sauvegarder:
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 ...");
}
Et bien sûr, vous pouvez faire plus de vérifications avec le code ci-dessus.
Vous avez 3 options.
Utilisez simplement les champs personnalisés natifs de WordPress. À moins que vous n’ayez une bonne raison de ne pas le faire, ils vous iraient bien et fonctionneraient parfaitement avec les types de publication personnalisés.
Créez vos propres champs personnalisés et associez-les à votre CPT à l'aide de wpdb. Vous avez besoin d’une bonne raison de le faire au lieu d’utiliser Option1.
Découvrez le framework pods , il s’agit essentiellement de CPT avec davantage de contrôle sur la base de données.