PHP如何在数组中使用变量

时间:2014-02-18 08:59:41

标签: php arrays wordpress

我的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' );

}

我不知道如何在类别字段中插入类别名称列表,因此它可以作为数组使用。

3 个答案:

答案 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.

更多信息:http://php.net/manual/en/function.array-keys.php

答案 2 :(得分:0)

只需在循环中准备一个数组

$terms[] = $slug

并分配到期限

 'terms' => $terms,