我需要将自定义post类型post数据存储到自定义表中,而不是存储在wp\\U post和wp\\U POSTETA中。有可能吗?请任何人帮忙。实际上,我已经创建了两个名为“truck”和“drivers”的自定义帖子类型。然后我在wordpress admin中创建了一个菜单页。单击此菜单应列出与卡车相关的所有驾驶员。还应该有这个界面的拖放系统,以便我可以将任何卡车分配给任何驾驶员。排序后,应更新表。因此,我需要一个新的表来定制帖子类型。
将自定义帖子类型保存在不同的表中
虽然我非常喜欢尽可能多地调整wordpress,因为它允许我们这样做,但我认为最好的方法是在编码之前使用最好的算法。
读了你的问题,我发现“Actually, I have created two custom post type named \'truck\' and \'drivers\'
“。
Issue: 链接两种帖子类型需要做额外的工作,因为Wordpress并不是这样做的。
Suggested Solution: 这样做,WP自然工作的方式:Link a Custom Post Type to a taxonomy
. 因此,与其将“卡车”和“司机”作为CPT,不如将“司机”作为CPT,将“卡车”作为分类法!这为您节省了大量的工作,尤其是遇到问题的风险应该更新WP。
然后,您可以在CPT和分类法上创建拖放的自定义功能
我不会给出任何具体的代码,但我会告诉您如何在不创建任何自定义数据库表的情况下完成这项工作。我假设one driver per truck
算法创建两个html列表,使其可排序
$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];
。。等等我们有两个表,一个是司机表,一个是卡车表。我们为每个项目输出post类型的ID。
<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>
2。假设您要使用JS/JQ排序。也许jquery ui可排序库。当任何一个项目(卡车/司机)被分拣时。您遍历这两个列表并按顺序收集帖子id。
// 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
});
}
3。AJAX处理程序:
在我们开始之前。How I am going to track 哪个卡车属于哪个驾驶员,反之亦然?我要用邮局的桌子post_parent
该字段。有些人可以使用post-meta。这也很好。如果Driver#1
已分配给Truck #11
然后
Driver #1 post parent = 11
Truck #11 post parent = 1
我知道很奇怪,他们会同时成为彼此的孩子和父母:)现在我们已经有了js代码设置,我们可以添加php代码来接收数据和流程;
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();
}
Note: 每次司机都会分配一辆新卡车。您需要更新驾驶员和卡车立柱类型post_parent
领域这通常是可以做到的。