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