Ottenere post dalle categorie figlie usando l'ID della categoria genitore
Ho un plugin che mostra i post da una categoria selezionata. Quando vengono scelte le categorie figlie funziona perfettamente. Tuttavia quando scelgo una categoria genitore, non visualizza nessun post dalle categorie figlie.
Spero che questo sia lo snippet che deve essere modificato, ma non ne sono sicuro.
Sarebbe bello se qualcuno potesse aiutarmi.
<ul>
<?php
query_posts(array(
'post_type' => 'post',
'category__in' => $text, // ID delle categorie da includere
'orderby' => 'meta_value_num', // Ordina per valore numerico del meta
'meta_key' => 'rankk', // Chiave meta per l'ordinamento
'order' => 'DESC', // Ordinamento decrescente
'posts_per_page' => 100 // Numero di post da visualizzare
));
?>

Come ho già detto nei miei commenti alla tua domanda
I plugin scritti male portano sempre a qualche disastro prima o poi. Secondo me, elimina quel plugin e scrivi il tuo codice o trova un plugin scritto correttamente. Non ha senso cambiare la gomma bucata quando l'intera macchina è da rottamare :-)
Per iniziare, non usare mai query_posts
Nota: Questa funzione non è pensata per essere usata da plugin o temi. Come spiegato più avanti, ci sono opzioni migliori e più performanti per alterare la query principale. query_posts() è un modo troppo semplicistico e problematico per modificare la query principale di una pagina sostituendola con una nuova istanza della query. È inefficiente (riesegue query SQL) e fallirà completamente in alcune circostanze (specialmente spesso quando si ha a che fare con l'impaginazione dei post).
Saresti molto meglio a scrivere il tuo codice e abbandonare quel plugin. Puoi anche unire il plugin corrente (solo il codice "buono") con il codice che ti fornirò nel tuo plugin personale se necessario.
Non dovresti mai fare modifiche ai file di plugin/temi di cui non sei l'autore. La ragione principale è che, al momento dell'aggiornamento, perderai tutte le tue personalizzazioni. Piuttosto crea il tuo plugin o fai le modifiche in un child theme.
Quello che vuoi ottenere non è fattibile con i parametri delle categorie attuali. La tua migliore opzione qui sarà usare un tax_query
con WP_Query
. Con un tax_query
, per impostazione predefinita, i termini figli sono inclusi nel termine impostato, ed è proprio questo che stai cercando.
Puoi provare il seguente codice (NOTA BENE: richiede PHP 5.4+)
$args = [
'post_type' => 'post',
'orderby' => 'meta_value_num',
'meta_key' => 'rankk',
'order' => 'DESC',
'posts_per_page' => 100,
'tax_query' => [
[
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => 'IL TUO ID CATEGORIA GENITORE',
],
],
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
Per versioni di PHP precedenti alla 5.4 prova questo
$args = array(
'post_type' => 'post',
'orderby' => 'meta_value_num',
'meta_key' => 'rankk',
'order' => 'DESC',
'posts_per_page' => 100,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => 'IL TUO ID CATEGORIA GENITORE',
),
),
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}

Ho provato a usare il tuo suggerimento, ma non ho conoscenze di PHP :/. Potrei pagarti per sistemarlo? (speravo ci fosse un'opzione per i messaggi privati)

Scusa, c'è un piccolo errore di sintassi nel mio codice. Vedi il mio aggiornamento

Ricevo un errore fatale (ho i Backup per sicurezza). Dovrei sostituire 'YOUR PARENT CATEGORY ID'
con $text
?

Beh, se vuoi continuare a usare il plugin e modificarlo (cosa che non consiglio affatto), allora sì

Grazie per la modifica suggerita. Ora capisco dove era il tuo problema e avrei dovuto aggiungere una nota al riguardo: la sintassi nel mio codice è supportata solo da PHP versione 5.4 e successive. Nelle versioni precedenti otterrai un errore fatale. Nelle versioni precedenti dovresti usare array()
mentre in 5.4+ puoi semplicemente usare []
:-)

puoi utilizzare questo metodo:
<?php
$category_id = get_cat_ID('Nome Categoria');
<!-- Inizia il Loop. -->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- Verifica se il post corrente è nella categoria "Nome Categoria". -->
<!-- Se lo è, al div viene assegnata la classe CSS "post-cat-special". -->
<!-- Altrimenti, al div viene assegnata la classe CSS "post". -->
<?php if ( in_category($category_id) ) { ?>
<div class="post-cat-special">
<?php } else { ?>
<div class="post">
<?php } ?>
</div>
<!-- Termina il Loop (ma nota l'"else:" - vedi riga successiva). -->
<?php endwhile; else: ?>
<!-- Il primo "if" verifica se ci sono post da -->
<!-- visualizzare. Questa parte "else" specifica cosa fare se non ce ne sono. -->
<p>Spiacenti, nessun post corrisponde ai tuoi criteri.</p>
<!-- TERMINA definitivamente il Loop. -->
<?php endif; ?>
usa questo codice magico ovunque tu abbia bisogno di visualizzare...
