我的wordpress主题中有一个选项页面,它是从自定义分类中选择多个类别。
$terms_obj = get_option('shop_features')
这将返回一个数组,其中$ key为category-name,$ value为1或为空,具体取决于是否已选中类别。
我需要在另一个函数中获取要在数组中使用的已检查类别的列表:
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() && is_shop() ) {
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'knives' ), // Don't display products in the knives category on the shop page
'operator' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
我需要在变量$ terms中插入我的类别名称,以'terms' => array('knives')
替换'terms' => array ( $terms )
除了它只是这样做不起作用!
以下是我试图实现的目标:
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() && is_shop() ) {
$terms_obj = of_get_option( 'eco_shop_features', $default );
foreach ( $terms_obj as $slug => $checked ) { //$key ==> value
if ( $checked > 0 )
$terms .= '\'' . $slug . '\', ';
}
$terms = rtrim( $terms, ', ' );
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( "$terms" ), // Don't display products in the knives category on the shop page
'operator' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
我不知道如何在类别字段中插入类别名称列表,因此它可以作为数组使用。
答案 0 :(得分:3)
正确的方式似乎被你评论出来,下面应该有效
foreach ( $terms_obj as $slug => $checked ) { //$key ==> value
if ( $checked > 0 )
$terms[] = $slug;
}
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $terms,
'operator' => 'NOT IN'
)));
答案 1 :(得分:1)
要获取类别名称数组,您可以这样做:
$terms_obj = get_option('shop_features');
$category_name_array = array_keys($terms_obj, 1);
array_keys($terms_obj, 1)
函数将在数组中提取$ terms_obj的所有键,以获得值匹配1.
答案 2 :(得分:0)
只需在循环中准备一个数组
$terms[] = $slug
并分配到期限
'terms' => $terms,