Lista de subcategorías con imagen destacada

4

En una página, necesito mostrar una lista de todas las subcategorías de una categoría específica.

Por ejemplo, en la categoría Deporte tienen 6 subcategorías:

  
  • nadar
  •   
  • Fútbol
  •   
  • Cesta
  •   
  • esquí
  •   
  • hockey
  •   

Cada subcategoría tiene una imagen, un título y una descripción destacados, que me gustaría mostrar.

He añadido una imagen destacada con este código (en functions.php):

add_action('init', 'my_category_module');
function my_category_module() {
 add_action ( 'edit_category_form_fields', 'add_image_cat');
 add_action ( 'edited_category', 'save_image');
 }

function add_image_cat($tag){
 $category_images = get_option( 'category_images' );
 $category_image = '';
 if ( is_array( $category_images ) && array_key_exists( $tag->term_id, $category_images ) ) {
 $category_image = $category_images[$tag->term_id] ;
 }
 ?>
 <tr>
 <th scope="row" valign="top"><label for="auteur_revue_image">Image</label></th>
 <td>
 <?php
 if ($category_image !=""){
 ?>
 <img src="<?php echo $category_image;?>" alt="" title=""/>
 <?php
 }
 ?>
 <br/>
 <input type="text" name="category_image" id="category_image" value="<?php echo $category_image; ?>"/><br />
 <span>This field allows you to add a picture to illustrate the category. Upload the image from the media tab WordPress and paste its URL here.</span>
 </td>
 </tr>
 <?php
 }
function save_image($term_id){
 if ( isset( $_POST['category_image'] ) ) {
 //load existing category featured option
 $category_images = get_option( 'category_images' );
 //set featured post ID to proper category ID in options array
 $category_images[$term_id] =  $_POST['category_image'];
 //save the option array
 update_option( 'category_images', $category_images );
 }
 }

category.php

<?php
 if(is_category()){
 $category_images = get_option( 'category_images' );
 $category_image = '';
 if ( is_array( $category_images ) && array_key_exists( get_query_var('cat'), $category_images ) ){

$category_image = $category_images[get_query_var('cat')] ;
 ?>
 <img src="<?php echo $category_image;?>"/>
 <?php
 }
 }
 ?>

Necesito que la cuadrícula tenga este aspecto (esto es para una publicación reciente)

Con esto puedo mostrar todas las categorías con sus descripciones, pero ¿cómo puedo agregar la imagen destacada y mostrar solo las subcategorías de cierta categoría principal?

<?php
$categories = get_categories( array(
    'orderby' => 'name',
    'order'   => 'ASC'
) );

foreach( $categories as $category ) {
    $category_link = sprintf( 
        '<a href="%1$s" alt="%2$s">%3$s</a>',
        esc_url( get_category_link( $category->term_id ) ),
        esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ),
        esc_html( $category->name )
    );

    echo '<p>' . sprintf( esc_html__( 'Category: %s', 'textdomain' ), $category_link ) . '</p> ';
    echo '<p>' . sprintf( esc_html__( 'Description: %s', 'textdomain' ), $category->description ) . '</p>';}

¿También es posible mostrar como una cuadrícula?

Gracias

    
pregunta skifast 05.12.2016 - 20:11

2 respuestas

0

¿Cómo puedo agregar la imagen destacada?

Por lo que puedo decir en su código, ha almacenado todas las imágenes destacadas de la categoría en la opción category_images . Por lo tanto, puede usar get_option para recuperar la imagen destacada para cada categoría:

$image_urls = get_option( 'category_images', array() );    

foreach ( $categories as $category ) {
    $cat_id = $category->term_id;
    $image_url = isset( $image_urls[$cat_id ) ? $image_urls[$cat_id] : '';

    ...
}

Luego puedes usar $image_url como el atributo src de un <img> .

¿Cómo puedo mostrar solo las subcategorías de una categoría determinada?

Al igual que get_terms , get_categories tiene un parámetro 'child_of'. De nuevo, en su bucle foreach :

    $sub_categories = get_categories( array(
        'orderby' => 'name',
        'order' => 'ASC',
        'child_of' => $cat_id,
    ) );

    foreach ( $sub_categories as $sub_category ) {
        // Process the sub-categories here.
    }

¿Es posible mostrarlos como una cuadrícula?

Sí, puedes! Pero esa es una pregunta HTML / CSS que creo que está fuera del alcance de esta pregunta. Continúa y abre una nueva pregunta bajo ese tema. Nunca puedes pedir demasiados. :)

Espero que esto ayude!

    
respondido por el ricotheque 07.03.2017 - 13:57
0

Supongo que ya has encontrado la respuesta. Si no lo ha hecho, use la función a continuación. Skip primera categoría usando contador

function your_function( $taxonomy = 'category', $show_links = true, $echo = true ) {

// Make sure taxonomy exists
if ( ! taxonomy_exists( $taxonomy ) ) {
    return;
}

// Get terms
$list_terms = array();
$terms      = wp_get_post_terms( get_the_ID(), $taxonomy );

// Return if no terms are found
if ( ! $terms ) {
    return;
}

// Loop through terms
foreach ( $terms as $term ) {
    $permalink = get_term_link( $term->term_id, $taxonomy );
    if ( $show_links ) {
        $list_terms[] = '<a href="'. $permalink .'" title="'. esc_attr( $term->name ) .'" class="term-'. $term->term_id .'">'. $term->name .'</a>';
    } else {
        $list_terms[] = '<span class="term-'. $term->term_id .'">'. esc_attr( $term->name ) .'</span>';
    }
}

// Turn into comma seperated string
if ( $list_terms && is_array( $list_terms ) ) {
    $list_terms = implode( ', ', $list_terms );
} else {
    return;
}

// Echo terms
if ( $echo ) {
    echo $list_terms;
} else {
    return $list_terms;
}

}

    
respondido por el Wordpress Novice 17.03.2017 - 15:28

Lea otras preguntas en las etiquetas