Un utente ha chiesto informazioni su Developing with WordPress di Wordpress

Categoria e sottocategoria

Un utente ha chiesto 👇

Il codice seguente mostra le sottocategorie collegate alla categoria selezionata. Facendo clic sul collegamento della sottocategoria verranno visualizzate le sottocategorie di quella sottocategoria selezionata.

E così via. Tuttavia, non mostra le posizioni quando si trova all’ultimo livello della sottocategoria.

Come ottengo questo codice per portarti lavori relativi alla sottocategoria selezionata?

Per esempio:

Le sottocategorie “pneumatici” e “ricambi” sono nella categoria “auto”. E la sottocategoria “motore” e “vetro” sono nella sottocategoria “parti”. E il post “Motore 1” è nella categoria “motore”.

Quando clicco sulla categoria “auto”, la pagina deve solo visualizzare le “gomme” e le “parti” delle sottocategorie.

Quando clicco sulla sottocategoria “parti” dovrebbe mostrare le sottocategorie “motore” e “vetro”

Infine, quando clicco sulla sottocategoria “motore” dovrebbe mostrare i post relativi a “motore”.

global $cat;
$categoriasFilhas = get_categories(‘parent=’ . $cat);
foreach($categoriasFilhas as $category) {
echo ‘<p>term_id ) . ‘” >’ . $category->name.’</p>’;
}

(@bcworkz)

9 mesi, 3 settimane fa

Se non ci sono elementi secondari nella categoria corrente, $ categoriesFilhas sarà un array vuoto. Aggiungi una condizione quando WP_Query vuoto rende nuovi i tuoi post nella categoria corrente. Fai un giro nel frutto. Vedi https://developer.wordpress.org/reference/classes/wp_query/

A proposito, il codice che hai pubblicato contiene errori di sintassi. Le singole virgolette non sono corrette. Apparentemente hai copiato / incollato da altrove nei forum in cui il codice non è stato aggiunto ai segnalibri con i backup. Inoltre non fa nulla di cliccabile. L’output contiene solo nomi di categoria come testo. Non dà fastidio alla tua domanda o alla mia risposta, ma non funziona come dici tu.

Lanciatore di thread

(@ramponi)

9 mesi, 3 settimane fa

Mi dispiace. Il codice corretto è:

global $cat;
$categoriasFilhas = get_categories('parent=' . $cat);
foreach($categoriasFilhas as $category) {
echo '<p><a href="' . get_category_link( $category->term_id ) . '" >' . $category->name.'</a></p>';
}

Ma WP_Query mi mostrerà i post della categoria?

Questa risposta è stata modificata 9 mesi, 3 settimane fa da. Lanciatore di thread

(@ramponi)

9 mesi, 3 settimane fa

Sono riuscito a trovare questo codice di seguito, ma filtra solo i post dalla categoria selezionata. Li sta portando tutti.

<?php 

global $cat;
$categoriasFilhas = get_categories('parent=' . $cat);
foreach($categoriasFilhas as $category) {
echo '<p><a href="' . get_category_link( $category->term_id ) . '" >' . $category->name.'</a></p>';
}

$the_query = get_posts( array( 
	'category_name' => $category->name,
) );
 

if ( count( $the_query ) ) {
	echo '<ul>';
	foreach( $the_query as $novidade ) {
		echo '<li>' . get_the_title( $novidade->ID ) . '</li>';
	}
	echo '</ul>';
}

?>

(@bcworkz)

9 mesi, 3 settimane fa

Sì, get_posts() sorta di cartella per la classe WP_Query. Fondamentalmente fanno la stessa cosa. Entrambi accettano gli stessi argomenti.

Il codice che hai pubblicato funziona come previsto quando viene utilizzato sul mio sito. Tutto quello che devo fare è aggiungere $ cat all’ID della categoria genitore sul mio sito. Ho trovato un elenco di post a cui era stata assegnata la stessa sottocategoria di quella collegata. Se segui il collegamento alla categoria dovresti ottenere un elenco di archivio degli stessi post.

Le query di lavoro possono essere modificate in un altro codice, il che può causare un comportamento confuso quando la modifica viene applicata quando non dovrebbe esserlo. A volte, un esame della query SQL effettiva utilizzata sarà un’indicazione del motivo per cui non funziona come previsto. Per visualizzare l’SQL dobbiamo utilizzare la versione WP_Query del tuo codice:

$categoriasFilhas = get_categories('parent=' . $cat);
foreach($categoriasFilhas as $category) {
echo '<p><a href="' . get_category_link( $category->term_id ) . '" >' . $category->name.'</a></p>';
}

$the_query = new WP_Query( array(
	'category_name' => $category->name,
) );

echo $the_query->request;

if ( count( $the_query->posts ) ) {
	echo '<ul>';
	foreach( $the_query->posts as $novidade ) {
		echo '<li>' . get_the_title( $novidade->ID ) . '</li>';
	}
	echo '</ul>';
}

Lanciatore di thread

(@ramponi)

9 mesi, 3 settimane fa

Sul mio sito Web, il codice visualizza tutti i post e non solo la categoria.
Il codice non è filtrato per categoria. Guarda:

SELEZIONA SQL_CALC_FOUND_ROWS op_posts.ID From op_posts PLACE 1 = 1 AND op_posts.post_type = ‘post’ AND (op_posts.post_status = ‘publish’ OR op_posts.post_status = ‘private’) ORDER AT op_posts.Cost

Lanciatore di thread

(@ramponi)

9 mesi, 3 settimane fa

L’ho trovato con il codice qui sotto. L’unico punto è che mostra anche i lavori nella categoria principale (padre) e non solo nell’ultima categoria (bambino). Idealmente, dovrebbe essere visualizzato solo nella categoria figlio. Può essere regolato?


<?php 

$page_object = get_queried_object();

$categoriasFilhas = get_categories('parent=' . $cat);
foreach($categoriasFilhas as $category) {
echo '<p><a href="' . get_category_link( $category->term_id ) . '" >' . $category->name.'</a></p>';
}

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'cat' => $page_object->cat_ID,
    'posts_per_page' => 5,
);

$arr_posts = new WP_Query( $args );
 
if ( $arr_posts->have_posts() ) :
 
    while ( $arr_posts->have_posts() ) :
        $arr_posts->the_post();
        ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <div class="entry-content">

                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </div>
        </article>
   
<?php
    endwhile;
endif;

?>

(@bcworkz)

9 mesi, 3 settimane fa

L’ultimo codice che hai pubblicato non è lo stesso del tuo esempio precedente. Quest’ultimo restituirebbe tutti i post perché 'cat' => $page_object->cat_ID, sbagliato. Dovrebbe essere 'cat' => $page_object->term_id,

Per inviare in modo condizionale i post a categorie senza figli, provare get_categories () se l’ID padre è l’ID del termine della categoria di pagina. Se viene restituito un array vuoto, la categoria non ha elementi secondari e la richiesta di lavoro e l’output possono procedere.

Lanciatore di thread

(@ramponi)

9 mesi, 3 settimane fa

bcworkz, grazie mille!

Ecco il codice! Perfetto!


<?php 

$page_object = get_queried_object();

$categoriasFilhas = get_categories('parent=' . $cat);
foreach($categoriasFilhas as $category) {
echo '<p><a href="' . get_category_link( $category->term_id ) . '" >' . $category->name.'</a></p>';
}

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'cat' => $page_object->term_id,
    'posts_per_page' => 5,

);

$arr_posts = new WP_Query( $args );

function category_has_children( $term_id ){ 
    $children = get_term_children( $term_id, "category" );
    if(is_array($children)){
      return $children;
    } else {
      return false;
    }
}
 
if ( $arr_posts->have_posts() ) :
 
    while ( $arr_posts->have_posts() ) :
        $arr_posts->the_post();
        ?>

<?php if( category_has_children( $cat ) == false) : ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <div class="entry-content">

                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </div>
        </article>

<? endif; ?>

   
<?php
    endwhile;
endif;

?>

Was this helpful?

0 / 0

Lascia un commento 0

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