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