还是在开发导航类主题 Slhao 的时候遇到的问题，主题使用 Codestar Framework 专业版选项框架，文章的 Metabox 选项都是存储在一个数组中，导致 WP\_Query 不能直接使用子 meta\_key 来获取文章，幸好 WordPress 功能强大，WP\_Query 类选项也丰富，最终完成了有特定字段的文章输出。

### 一、文章中的 meta\_key 内容的输出

**1、单个字段的内容输出**
在绝大多数 Metabox 的值都是单个的字段，直接使用：

```
echo get_post_meta( $post->ID, 'meta_key', true);
```

就可以输出字段中的内容。

**2、序列化数组字段的内容输出**
如果字段是一个数组（bookmark\_options），输出:

```
echo get_post_meta( $post->ID, 'bookmark_options', true);
```

是没有内容，使用 var\_dump() 函数打印输出则是一个数组：

```
array(2) {
    ["website"] => string(21) "https://api.salongweb.com"
    ["common"] => string(1) "1"
}
```

在编辑文章中假如有website和common两个选项，这时输出以下代码：

```
echo get_post_meta( $post->ID, 'website', true);
echo get_post_meta( $post->ID, 'common', true);
```

同样是没有任何内容，只有这样：

```
$options = get_post_meta( $post->ID, 'bookmark_options', true);
echo $options['common'];
```

才能输出common的内容是为1，即是输出序列化数组 bookmark\_options 中的 common 字段的值。

第一部分主要是说明下序列化数组字段的获取与单个字段的不同。

### 二、WP\_Query 中获取有某个字段的文章

**1、获取有单个字段（common）的文章**

```
$args = array(
    'post_type'           => 'bookmark',
    'ignore_sticky_posts' => 1,
    'posts_per_page'      => 4,
    'meta_key'            => 'common'
);
$wp_query = new WP_Query( $args );if ( $wp_query->have_posts() ) :
while ( $wp_query->have_posts() ) : $wp_query->the_post();
    // 输出内容
endwhile;
```

**2、获取bookmark\_options序列化数组字段中 common 值为1的文章**

```
$args = array(
    'post_type'           => 'bookmark',
    'ignore_sticky_posts' => 1,
    'posts_per_page'      => 4,
    'meta_query'          => array(
        array(
            'key'         => 'bookmark_options',
            'value'       => 's:6:"common";i:"1";',
            'compare'     => 'LIKE',
        )
    )
);
$wp_query = new WP_Query( $args );if ( $wp_query->have_posts() ) :
while ( $wp_query->have_posts() ) : $wp_query->the_post();
    // 输出内容
endwhile;
```

`s:6:"common";s:1:"1"`为整数，如果数组值是字符串或布尔值，则应更改元查询值模式：

```
// 值为字符串类型
's:6:"common";s:1:"1";'
// 值为布尔值类型
's:6:"common";b:1;'
```

这个值，都可以在 \_postmeta 数据表中对应的字段查看到，使用自定义字段中的compare参数，来进行匹配，匹配的方法为 LIKE，其它的方法还有：=、!=、&gt;、&gt;=、&lt;、&lt;=、LIKE、NOT LIKE、IN、NOT IN、BETWEEN、NOT BETWEEN、EXISTS、NOT EXISTS，所以 WP\_Query 类选项是相当丰富，有时间彻底整理一个使用大全。

参考内容：https://ipfs-sec.stackexchange.cloudflare-ipfs.com/wordpress/A/question/84551.html