Pregunta sobre Developing with WordPress de Wordpress:

Usando y foreach con $ wpdb

Un usuario preguntó 👇

Hola

Estoy usando ACF (Campos personalizados avanzados) los fines de semana. Tengo un post_type llamado «rundowns» para hacer algunas listas de publicaciones de otro post_type llamado «elementos». A medida que voy hacia abajo, estoy usando ACF para editar el ID del trabajo de los «elementos» post_type.

Ahora quiero mostrar todas las publicaciones en todas las páginas pasadas (post-rundown.php), pero quiero cambiar el orden de la lista con arrastrar y soltar.

Obtuve estos códigos, pero no puedo obtener los resultados de MySQL.

En la parte superior de one-rundown.php:

get_header();
function get_records()
{
	//$con=connectsql();
	$records=$wpdb->query("SELECT * FROM $wpdb->posts WHERE post_type = 'elements' AND post_status = 'publish'");
	$all=array();
	while($data=$records->fetch_assoc())
	{
		$all[]=$data;
	}
	return $all;
}

Y aquí está el código para mostrar:

<ul id="sortable">
<?php $data=get_records(); ?> 
<?php foreach($data as $record): ?>
<li data-id="<?php echo $record['id'];  ?>" class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><?php echo $record['id'];  ?><?php echo $record['name']; ?></li>
<?php endforeach; ?>
</ul>
<button id="save-reorder">Save</button>

(@diondesigns)

Hace 2 años, 7 meses

WordPress usa el acceso de estilo procedimental en su DBAL porque admite ambos mysql y mysqli extensiones. Eso significa que primero debes decidir qué extensión $wpdb usando, y luego usando el comando de procedimiento apropiado. ¡Asegúrese de publicar el conjunto de resultados más tarde!

Para su información, su código se ejecutaría más rápido si eliminara el get_records() función y agréguelo directamente en su código de visualización. Eso eliminaría uno de los dos bucles.

(@bcworkz)

Hace 2 años, 7 meses

Necesitas declarar global $wpdb; dentro del alcance de su uso. Dentro de la declaración de función si te apegas a eso, o en la plantilla si sigues el consejo de Dion.

(@wamslers)

Hace 2 años, 7 meses

@diondesigns Pero, ¿cómo puedo determinar la extensión de mysql?

Ahora he intentado combinar los dos bucles, pero no puedo encontrar ningún resultado en la base de datos.

<?
get_header();
global $wpdb;
?>

… ..

<?php 
$records=$wpdb->query("SELECT * FROM $wpdb->posts WHERE post_type = 'elements' AND post_status = 'publish'");
$all = array();
foreach($data as $records): 
  $all[]=$data; ?>

<li data-id="<?php echo $data['id'];  ?>" class="ui-state-default">
  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
  <?php echo $data['id'];  ?>
  <?php echo $data['name']; ?>
  <?php echo $data['post_title']; ?>
</li>

<?php 
endforeach; 
return $all; 
?>

Esta respuesta fue modificada hace 2 años, 7 meses.

(@bcworkz)

Hace 2 años, 7 meses

Solo $ wpdb-> query () devuelve solo las filas encontradas. Los resultados reales están en los resultados de $ wpdb->.

Sus parámetros foreach están invertidos. Suponiendo que se encontrarán resultados y no filas en $ registros, foreach( $records as $data ):

(@wamslers)

Hace 2 años, 7 meses

Estoy chirriante, sí, tiene sentido cambiar los parámetros en el foreach, pero todavía no funciona 🙁

<?php 
$records=$wpdb->results("SELECT * FROM $wpdb->posts WHERE post_type = 'elements' AND post_status = 'publish'");
$all = array();
foreach($records as $data): 
$all[]=$data; 
// doing stuff
endforeach; 
return $all; 
?>

Creo que mi declaración SELECT es incorrecta. Cuando utilizo un enlace manual de mysqli, funciona con una tabla sin palabras. Tengo el mundo $wpdb; justo detrás del get_header();

(@wamslers)

Hace 2 años, 7 meses

Funciona ahora cuando lo uso get_results en vez de results

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.