Cómo recuperar datos wp_ json_encode de la tabla de base de datos personalizada de WordPress

2

He creado campos dinámicos de agregar / quitar en la página de envío de post de frontend. Uso wp_json_encode y $wpdb->insert para insertar datos en mi tabla de base de datos personalizada de WordPress. El sistema funciona perfectamente.

Los datos se almacenan en la columna "reward_details" de mi tabla personalizada. Parece que:

{"reward_amount":["500","250","20000","3000"],"reward_title":["Horse","Cat","Tiger","Monkey"],"reward_description":["Horse Home","Cat Home","Tiger Home","Monkey Home"]}

Sin embargo, no puedo recuperar y mostrar los datos usando json_decode . El siguiente es mi código:

<?php $project_id = $_SESSION['project_id']; global $wpdb; $string = $wpdb->get_results( "SELECT reward_details FROM wpxa_rewards WHERE project_id = $project_id" );

  $someArray = json_decode($string, true);

    $count = count( $someArray );
    for ( $i = 0; $i < $count; $i++ ) { ?>

<div class="panel panel-default">
  <div class="panel-body">
     <?php echo $someArray[$i]["reward_title"]; ?>
  </div>
</div>

 <?php } ?>

Quiero recuperar y mostrar datos dinámicamente ... Por favor, ayuda ...

    
pregunta Minesh 01.02.2018 - 07:13

2 respuestas

2

Hola, gracias por su valioso soporte ... He encontrado la solución. Vea abajo:

<?php $project_id = $_SESSION['project_id']; $query = $wpdb->prepare( "SELECT reward_details FROM wpxa_orocox_rewards WHERE project_id = %d", $project_id );

$string = $wpdb->get_var( $query );

$someArray = json_decode( $string, true );

    $count = count( $someArray['reward_title'] );
    for ( $i = 0; $i < $count; $i++ ) { ?>

<div class="panel panel-default">
  <div class="panel-body">
     <?php echo $someArray["reward_amount"][$i]; ?>
     <?php echo $someArray["reward_title"][$i]; ?>
     <?php echo $someArray["reward_description"][$i]; ?>
  </div>
</div>

<?php } ?>
    
respondido por el Minesh 01.02.2018 - 10:38
2

$wpdb->get_results() devuelve una matriz de filas que representan los resultados. Las propias filas se pueden representar como objetos o matrices según el segundo argumento.

Consulte la documentación :

  

output_type
  Una de las cuatro constantes predefinidas. Por defecto es OBJETO. Consulte SELECCIONE una fila y sus ejemplos para obtener más información.

     
  • OBJETO: el resultado se mostrará como una matriz indexada numéricamente de objetos de fila.
  •   
  • OBJECT_K: el resultado se generará como una matriz asociativa de objetos de fila, utilizando los valores de la primera columna como claves (los duplicados serán   descartado).
  •   
  • ARRAY_A: el resultado se mostrará como una matriz indexada numéricamente de matrices asociativas, usando los nombres de las columnas como claves.
  •   
  • ARRAY_N: el resultado se mostrará como una matriz indexada numéricamente de matrices indexadas numéricamente.
  •   

Entonces, cuando ejecute su consulta, obtendrá una matriz, con un elemento en ella que es un objeto con una propiedad reward_details que contiene el JSON.

Entonces, sin cambiar tu consulta, accederías a JSON con:

$someArray = json_decode( $string[0]->reward_details, true);

El bit de clave es $string[0]->reward_details . Ahí es donde está el valor.

wpdb tiene un mejor método para obtener una sola celda como esta, llamada get_var() :

$query = $wpdb->prepare( 
    "SELECT
        reward_details
    FROM 
        wpxa_rewards 
    WHERE 
        project_id = %d
    ", 
    $project_id
);

$string = $wpdb->get_var( $query );

$someArray = json_decode( $string );

get_var() básicamente hace la parte [0]->reward_details por ti.

También tenga en cuenta que he usado $wpdb->prepare para insertar el ID del proyecto en la consulta. No debe colocar los datos del usuario directamente en una consulta como lo hizo en la consulta original.

    
respondido por el Jacob Peattie 01.02.2018 - 08:15

Lea otras preguntas en las etiquetas