Guardar tipo de publicación personalizada en una tabla diferente

2

Necesito almacenar datos de publicaciones de tipo de publicación personalizados en una tabla personalizada, no en wp_posts y wp_postmeta. ¿Es posible? Alguien ayuda por favor. En realidad, he creado dos tipos de publicaciones personalizadas llamadas "camiones" y "conductores". Luego he creado una página de menú en wordpress admin. Al hacer clic en este menú se deben enumerar todos los controladores relacionados con el camión. También debería haber un sistema de arrastrar y soltar de esta interfaz para que pueda asignar cualquier camión a cualquier conductor. Después de ordenar, debe actualizar la tabla. Así que necesito una nueva tabla para el tipo de mensaje personalizado.

    
pregunta Arshad Hussain 19.07.2014 - 08:40

2 respuestas

3

Aunque soy un gran fanático de ajustar wordpress tanto como podría porque nos lo permite, creo que la mejor manera de avanzar es tener el mejor algoritmo antes de codificar.

Leyendo tu pregunta, encontré " Actually, I have created two custom post type named 'truck' and 'drivers' ".

Problema: vincular dos tipos de publicaciones requiere un trabajo adicional como lo estás haciendo porque, de forma nativa, no es lo que hace Wordpress.

Solución sugerida: hazlo, la forma en que WP funciona naturalmente: Link a Custom Post Type to a taxonomy . Entonces, en lugar de tener 'camión' y 'conductores' como CPT, ¡tenga 'conductores' como CPT y 'camiones' como taxonomía! Eso le ahorra un montón de trabajo, y especialmente el riesgo de encontrarse con problemas si WP se actualiza.

Luego puede crear la funcionalidad personalizada de arrastrar y soltar en CPT y taxonomía

    
respondido por el Janvier 28.07.2014 - 14:05
6

No voy a dar ningún código específico, pero le daré una idea de cómo se puede hacer sin crear una tabla de base de datos personalizada. Asumo que un conductor por camión

Algoritmo

  1. Crea dos listas html, haz que se puedan ordenar.
  2. Cada elemento de la lista representa un tipo de publicación y tiene un campo de datos de ID.
  3. Una vez que se haya realizado la clasificación, ponga todas las ID en orden. Hacer dos matrices uno contiene identificadores de camiones identificadores de otro conductor.
  4. Envíalos a través de ajax.
  5. Recorrer cualquiera de las publicaciones de actualización de matriz publica el campo principal para 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];
    

    .. y así sucesivamente

Sugerencia de HTML

Tenemos dos tabla una es el conductor y un camión. Enviamos la ID para el tipo de publicación para cada elemento.

<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

Suponiendo que va a utilizar la ordenación js / jq. Tal vez jQuery ui biblioteca clasificable. Cuando cualquiera de los elementos (camión / conductor) se ordenan. Ir a través de la lista de ambos y reunir ID de publicación en un orden

// 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 Handler:

Antes de entrar en eso. ¿Cómo voy a realizar un seguimiento de qué camión pertenece a qué conductor y viceversa? Voy a usar el campo de las tablas de publicación post_parent para eso. Algunos pueden usar post meta. Eso también está bien.

Si Driver#1 se asigna a Truck #11 , entonces

Driver #1 post parent = 11
Truck #11 post parent = 1

Sé raro, cada uno de ellos será el mismo padre e hijo al mismo tiempo :)

Ahora que tenemos la configuración de código js, podemos agregar código php para recibir los datos y el proceso;

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();
}

Nota: Cada vez que el conductor asigna un camión nuevo. Deberá actualizar los tipos de mensajes de conductor y camión post_parent field.

Esto es generalmente cómo se puede hacer.

    
respondido por el Sisir 19.07.2014 - 14:09

Lea otras preguntas en las etiquetas