使用WP_QUERY按定制分类检索定制帖子类型

时间:2019-03-13 作者:adeva 2006

我正在尝试使用ajax过滤自定义post类型的数据。为此,我将一些自定义分类显示为select标记。

我已经尝试了6个小时使用带有这些自定义分类参数的WP\\u查询来检索自定义帖子类型,但我无法使查询正常工作。

这是我的自定义帖子类型:

function cpt_retiro() {
$labels = array(
    \'name\'                  => _x( \'Retiros\', \'Post Type General Name\', \'break-breath\' ),
    \'singular_name\'         => _x( \'Retiro\', \'Post Type Singular Name\', \'break-breath\' ),
    \'menu_name\'             => __( \'Retiros\', \'break-breath\' ),
    \'name_admin_bar\'        => __( \'Retiros\', \'break-breath\' ),
    \'archives\'              => __( \'Archivos del retiro\', \'break-breath\' ),
    \'attributes\'            => __( \'Atributos del retiro\', \'break-breath\' ),
    \'parent_item_colon\'     => __( \'Elemento padre\', \'break-breath\' ),
    \'all_items\'             => __( \'Todos los retiros\', \'break-breath\' ),
    \'add_new_item\'          => __( \'Añadir nuevo retiro\', \'break-breath\' ),
    \'add_new\'               => __( \'Añadir nuevo\', \'break-breath\' ),
    \'new_item\'              => __( \'Nuevo retiro\', \'break-breath\' ),
    \'edit_item\'             => __( \'Editar retiro\', \'break-breath\' ),
    \'update_item\'           => __( \'Actualizar retiro\', \'break-breath\' ),
    \'view_item\'             => __( \'Ver retiro\', \'break-breath\' ),
    \'view_items\'            => __( \'Ver retiros\', \'break-breath\' ),
    \'search_items\'          => __( \'Buscar retiro\', \'break-breath\' ),
    \'not_found\'             => __( \'No se han encontrado retiros\', \'break-breath\' ),
    \'not_found_in_trash\'    => __( \'No se han encontrado retiros en la papelera\', \'break-breath\' ),
    \'featured_image\'        => __( \'Imagen destacada\', \'break-breath\' ),
    \'set_featured_image\'    => __( \'Seleccionar imagen destacada\', \'break-breath\' ),
    \'remove_featured_image\' => __( \'Borrar imagen destacada\', \'break-breath\' ),
    \'use_featured_image\'    => __( \'Establecer como imagen destacada\', \'break-breath\' ),
    \'insert_into_item\'      => __( \'Insertar en retiro\', \'break-breath\' ),
    \'uploaded_to_this_item\' => __( \'Subido a este retiro\', \'break-breath\' ),
    \'items_list\'            => __( \'Listado de retiros\', \'break-breath\' ),
    \'items_list_navigation\' => __( \'Navegación entre retiros\', \'break-breath\' ),
    \'filter_items_list\'     => __( \'Filtrar retiros\', \'break-breath\' ),
);
$args = array(
    \'label\'                 => __( \'Retiro\', \'break-breath\' ),
    \'description\'           => __( \'Retiros\', \'break-breath\' ),
    \'labels\'                => $labels,
    \'supports\'              => array( \'title\', \'editor\', \'thumbnail\', \'excerpt\', \'comments\' ),
    \'taxonomies\'            => array( \'category\', \'post_tag\', \'provincia\', \'ciudad\' ),
    \'hierarchical\'          => true,
    \'show_ui\'               => true,
    \'show_in_menu\'          => true,
    \'menu_position\'         => 5,
    \'menu_icon\'             => \'dashicons-location-alt\',
    \'show_in_admin_bar\'     => true,
    \'show_in_nav_menus\'     => true,
    \'can_export\'            => true,
    \'has_archive\'           => true,
    \'exclude_from_search\'   => false,
    \'publicly_queryable\'    => true,
    \'capability_type\'       => \'page\',
);
register_post_type( \'retiro\', $args );}

add_action( \'init\', \'cpt_retiro\', 0 );
这是我注册的分类法之一:

function taxonomia_provincia_retiro() {
$labels = array(
    \'name\'                       => _x( \'Provincias\', \'Taxonomy General Name\', \'break-breath\' ),
    \'singular_name\'              => _x( \'Provincia\', \'Taxonomy Singular Name\', \'break-breath\' ),
    \'menu_name\'                  => __( \'Provincias\', \'break-breath\' ),
    \'all_items\'                  => __( \'Todas las provincias\', \'break-breath\' ),
    \'new_item_name\'              => __( \'Añadir nuevo nombre de provincia\', \'break-breath\' ),
    \'add_new_item\'               => __( \'Añadir nueva provincia\', \'break-breath\' ),
    \'edit_item\'                  => __( \'Editar provincia\', \'break-breath\' ),
    \'update_item\'                => __( \'Actualizar provincia\', \'break-breath\' ),
    \'view_item\'                  => __( \'Ver provincia\', \'break-breath\' ),
    \'separate_items_with_commas\' => __( \'Separar provincias por comas\', \'break-breath\' ),
    \'add_or_remove_items\'        => __( \'Añadir o borrar provincias\', \'break-breath\' ),
    \'choose_from_most_used\'      => __( \'Elegir provincia entre las más usadas\', \'break-breath\' ),
    \'popular_items\'              => __( \'Provincias populares\', \'break-breath\' ),
    \'search_items\'               => __( \'Buscar provincias\', \'break-breath\' ),
    \'not_found\'                  => __( \'No se han encontrado provincias\', \'break-breath\' ),
    \'no_terms\'                   => __( \'No existen provincias\', \'break-breath\' ),
    \'items_list\'                 => __( \'Listado de provincias\', \'break-breath\' ),
    \'items_list_navigation\'      => __( \'Navegación entre provincias\', \'break-breath\' ),
);
$args = array(
    \'labels\'                     => $labels,
    \'hierarchical\'               => true,
    \'public\'                     => true,
    \'show_ui\'                    => true,
    \'show_admin_column\'          => true,
    \'show_in_nav_menus\'          => true,
    \'show_tagcloud\'              => true,
    \'query_var\'                  => true
);
register_taxonomy( \'provincia\', array( \'retiro\' ), $args );}

add_action( \'init\', \'taxonomia_provincia_retiro\', 0 );
因此,最终结果是:

Final CPT

另一个例子:Example

如果我这样做,效果很好:

$args = array(\'post_type\' => \'retiro\');
$query = new WP_Query($args);
但是,当我试图按照法典所说的那样做时,它不起作用:

$args = array(
\'post_type\' => \'retiro\',
\'tax_query\' => array(
    array(
        \'taxonomy\' => \'provincia\'
    ),
),);

$query = new WP_Query( $args );
我快疯了,这个代码怎么了??提前感谢您的帮助!祝你今天愉快!

1 个回复
最合适的回答,由SO网友:Jurgen Oldenburg 整理而成

您需要通过字段和术语才能以正确的方式工作:

\'tax_query\' => array(
    \'relation\' => \'AND\',
    array(
        \'taxonomy\' => \'provincia\',
        \'field\'    => \'slug\',
        \'terms\'    => array( \'term1\', \'term2\' ),
    ),
),

https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

相关推荐

返回LOAD_POSTS_BY_AJAX中的条件类别

我创建了一个返回最后三篇文章的短代码,并设置了一个属性,允许我根据所处的页面选择类别。function return_actu_home($atts) { ob_start(); extract( shortcode_atts( array( \'category\' => \'\' ), $atts ) ); $args = array( \'post_type\' =>