plugins – category_name no funciona (no aparece en la depuración de consultas SQL)

Pregunta:

Mi complemento tiene un código corto y recupera animales. Hay filtros / argumentos y todos funcionan bien excepto el argumento o parámetro de categoría.

Los nombres de las categorías están bien pasados ​​a mi función de shortcode, pero la solicitud WP_Query-> no muestra ningún signo de category_name. Intenté con cat y la identificación, lo mismo, no aparece nada. En cambio, devuelve un conjunto vacío de resultados.

    $filters    = array();
    $cat        = "";

    if( !empty($args['cat']) ) {
        $cat = trim($args['cat']);
    }

    $query = new WP_Query( array( 
        'post_type'         => 'animal',
        'category_name'     => 'rottweiler', /* ignored/breaks the sql query */
        'post_status'       => 'publish',
        'orderby'           => 'title',
        'order'             => 'asc',
        'numberposts'       => -1,
        'posts_per_page'    => -1,
        'meta_query'        => $filters
    ) );

    $animals = $query->get_posts();

    if( $animals ) {

        $columns = empty($args["columns"]) ? 2 : $args["columns"];

        $output .= '<div class="breedr"><ul class="columns '.number_to_words($columns).'">';

        foreach ( $animals as $animal ) {
            $output .= $this->breedr_template( plugin_dir_path( dirname( __FILE__ ) ) . 'public/partials/list-single-animal.php', $animal );
        }

        $output .= '</ul></div>';

    }
    else {
        $output .= "<span>No animal found.</span>";
    }

    return $output;

Y esto es lo que devuelve el sql de depuración, Y (0 = 1) claramente plantea un problema aquí:

CAT: rottweiler
SELECT wp_2_posts.* FROM wp_2_posts WHERE 1=1 AND ( 0 = 1 ) AND wp_2_posts.post_type = 'animal' AND ((wp_2_posts.post_status = 'publish')) GROUP BY wp_2_posts.ID ORDER BY wp_2_posts.post_title ASC 

No animal found.

Estoy confundido sobre las causas de este problema. La barra de categoría existe, todos los demás parámetros de esta consulta funcionan cuando simplemente elimino el parámetro de categoría.

Respuesta:

Si está usando una taxonomía personalizada para su CPT, entonces no puede usar parámetros de WP_Query que estén relacionados con categorías integradas; WP no podrá adivinar qué taxonomía debe consultarse.

Entonces, digamos que tiene una taxonomía personalizada llamada animal_type , entonces su consulta debería verse así:

$query = new WP_Query( array( 
    'post_type'         => 'animal',
    'post_status'       => 'publish',
    'orderby'           => 'title',
    'order'             => 'asc',
    'posts_per_page'    => -1,
    'tax_query'         => array(
        array( 'taxonomy' => 'animal_type', 'field' => 'slug', 'terms' => 'rottweiler' )
    ),
    'meta_query'        => $filters
) );

Tenga en cuenta que también he eliminado esta parte:

'numberposts'       => -1,

No existe tal parámetro para WP_Query. Había un parámetro llamado showposts , pero está obsoleto.

Leave a Comment

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

web tasarım