Pergunta sobre desenvolvimento com WordPress do WordPress: Usando e foreach com $ wpdb

Um usuário perguntou ?

Olá

Estou usando ACF (Advanced Custom Fields) nos finais de semana. Eu tenho um post_type chamado “rundowns” para fazer algumas listas de posts de outro post_type chamado “items”. Conforme vou descendo, estou usando o ACF para editar o ID do trabalho dos “elementos” post_type.

Agora eu quero exibir todos os posts em todas as páginas anteriores (post-rundown.php), mas quero mudar a ordem da lista arrastando e soltando.

Eu tenho esses códigos, mas não consigo obter os resultados do MySQL.

No topo 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;
}

E aqui está o código a ser exibido:

<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)

2 anos, 7 meses atrás

O WordPress usa acesso de estilo procedural em seu DBAL porque suporta tanto mysql e mysqli extensões. Isso significa que você deve primeiro decidir qual extensão $wpdb usando e, em seguida, usando o comando de procedimento apropriado. Certifique-se de postar o conjunto de resultados mais tarde!

FYI, seu código seria executado mais rápido se você removesse o get_records() função e adicioná-lo diretamente em seu código de exibição. Isso removeria um dos dois loops.

(@bcworkz)

2 anos, 7 meses atrás

você precisa declarar global $wpdb; dentro do escopo de seu uso. Dentro da declaração da função, se você seguir isso, ou no modelo, se seguir o conselho de Dion.

(@wamslers)

2 anos, 7 meses atrás

@diondesigns Mas como posso determinar a extensão mysql?

Agora tentei combinar os dois loops, mas não consigo encontrar nenhum resultado no banco de dados.

<?
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 resposta foi modificada há 2 anos e 7 meses.

(@bcworkz)

2 anos, 7 meses atrás

Apenas $wpdb->query() retorna apenas as linhas encontradas. Os resultados reais estão nos resultados de $wpdb->.

Seus parâmetros foreach são revertidos. Supondo que os resultados e não as linhas sejam encontrados em $records, foreach( $records as $data ):

(@wamslers)

2 anos, 7 meses atrás

Estou arranhado, sim, faz sentido alterar os parâmetros no foreach, mas ainda não 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; 
?>

Acho que minha instrução SELECT está errada. Quando eu uso um link mysqli manual, ele funciona com uma tabela sem palavras. eu tenho o mundo $wpdb; logo atrás do get_header();

(@wamslers)

2 anos, 7 meses atrás

Funciona agora quando eu uso get_results em vez de results

Isto foi útil?

0 / 0

Deixe um comentário 0

Your email address will not be published. Required fields are marked *