J'ai besoin de stocker des données de type de post personnalisées dans une table personnalisée, et non dans wp_posts et wp_postmeta. C'est possible? quiconque aide s'il vous plaît. En fait, j'ai créé deux types de messages personnalisés nommés "camion" et "conducteurs". Ensuite, j'ai créé une page de menu dans wordpress admin. Cliquez sur ce menu pour afficher la liste de tous les conducteurs liés au camion. Il devrait également y avoir un système de glisser-déposer de cette interface afin que je puisse affecter n'importe quel camion à n'importe quel conducteur. Après le tri, la table devrait être mise à jour. J'ai donc besoin d'une nouvelle table pour le type de publication personnalisé.
Bien que je sois un grand fan de la mise au point de wordpress autant que possible, cela nous permet de le faire, mais je pense que la meilleure voie à suivre consiste à avoir le meilleur algorithme avant le codage.
En lisant votre question, je suis tombé sur "Actually, I have created two custom post type named 'truck' and 'drivers'
".
Problème: Lier deux types de publication nécessite un travail supplémentaire, comme vous le faites, car ce n'est pas ce que Wordpress fait en natif.
Solution suggérée: Faites-le, comme WP fonctionne naturellement: Link a Custom Post Type to a taxonomy
. Ainsi, au lieu d'avoir "camion" et "conducteurs" en tant que CPT, choisissez plutôt "conducteurs" en tant que CPT et "camions" en taxonomie! Cela vous épargne des tonnes de travail, et en particulier le risque de rencontrer des problèmes devrait WP Update.
Vous pouvez ensuite créer la fonctionnalité personnalisée de glisser-déposer sur CPT et taxonomie.
Je ne vais pas vous donner de code spécifique, mais je vais vous donner une idée de la marche à suivre sans créer de table de base de données personnalisée. Je suppose un chauffeur par camion
Parcourez l’un des messages de mise à jour du tableau après le champ parent afin que,
$truck[0]->post_parent = $driver[0]
$driver[0]->post_parent = $truck[0];
$truck[1]->post_parent = $driver[1]
$driver[1]->post_parent = $truck[1];
$truck[2]->post_parent = $driver[2]
$driver[2]->post_parent = $truck[2];
.. etc
Nous avons deux tables dont une est chauffeur et un camion. Nous produisons l'ID du type d'article pour chaque article.
<h1>Drivers</h2>
<ul id="drivers">
<li data-id="1">Driver 1</li>
<li data-id="2">Driver 2</li>
<li data-id="3">Driver 3</li>
<li data-id="4">Driver 4</li>
<li data-id="5">Driver 5</li>
</ul>
<h1>Trucks</h2>
<ul id="trucks">
<li data-id="11">Truck 1</li>
<li data-id="12">Truck 2</li>
<li data-id="13">Truck 3</li>
<li data-id="14">Truck 4</li>
<li data-id="15">Truck 5</li>
</ul>
En supposant que vous utilisiez le tri js/jq. Peut-être que jQuery ui bibliothèque triable. Lorsque l'un des éléments (camion/chauffeur) est trié. Vous parcourez les deux listes et collectez les identifiants de post dans un ordre.
// after sorting complete run this function as a callback
function wpse155095_get_data(){
var drivers = [];
var trucks = [];
// get all drivers ID
$('#drivers li').each(function(){
var id = $(this).data('id');
drivers.Push(id);
});
// get all trucks ID
$('#trucks li').each(function(){
var id = $(this).data('id');
trucks.Push(id);
});
// Now Send both data to server via ajax call
drivers = JSON.stringify(drivers); // array to json conversion
trucks = JSON.stringify(trucks); // array to json conversion
var data = {};
data.action = 'wpse155095_save_data';
data.trucks = trucks;
data.drivers = drivers;
// important: I've omitted nonce for simplicity. You should pass nonce via ajax check when receive data on ajax callback.
$.ajax({
url: ajaxurl, // in admin area ajaxurl is defined.
type: 'POST',
data: data
});
}
Avant d'entrer dans cela. Comment je vais suivre quel camion appartient à quel conducteur et vice versa? Je vais utiliser post tables post_parent
champ pour cela. Certains peuvent utiliser post meta. C'est aussi bien.
Si Driver#1
est attribué à Truck #11
alors
Driver #1 post parent = 11
Truck #11 post parent = 1
Je sais bizarre, ils seront chacun enfants et parent en même temps:)
Maintenant que nous avons la configuration du code js, nous pouvons ajouter du code php pour recevoir les données et les traiter;
add_action( 'wp_ajax_wpse155095_save_data', 'ajax_wpse155095_save_data' );
function ajax_wpse155095_save_data(){
// check nonce or other validation
$drivers = ( isset($_POST['drivers']) && !empty($_POST['drivers']) ) ? json_decode($_POST['drivers'], true) : false;
$trucks = ( isset($_POST['trucks']) && !empty($_POST['trucks']) ) ? json_decode($_POST['trucks'], true) : false;
if( !$drivers || !$trucks )
die(0); // or show some other error;
if( count($drivers) != count($trucks) )
die('count mismatch'); // or show some other error
for( $i = 0; $i < count($drivers) ; $i++ ){
$driver_id = $drivers[$i];
$truck_id = $truck[$i]
// everytime driver or truck changes. You will need to update both driver and truck field
wp_update_post(array('ID' => $driver_id, 'post_parent' => $truck_id ));
wp_update_post(array('ID' => $truck_id, 'post_parent' => $driver_id ));
}
die();
}
Remarque: Chaque fois que le conducteur affectait un nouveau camion. Vous devrez mettre à jour le champ post_parent
des types de poste de conducteur et de camion.
C’est généralement comme cela que l’on peut le faire.