我无法在我的自定义POST类型查询中设置META_KEY

时间:2011-07-07 作者:Matt

我已经创建了一个自定义帖子,events, 并保存了元数据event_year 对每个事件。我想得到一年的活动档案。当我转到以下URL时meta_keymeta_value 由于某种原因未设置,因此未过滤事件存档。

/?post_type=events&meta_key=event_year&meta_value=2011
调试值:

echo $wp_query->query_vars[\'post_type\']; // \'events\'
echo $wp_query->query_vars[\'meta_key\']; // -blank-
echo $wp_query->query_vars[\'meta_value\']; // -blank-

Why can\'t I set the meta_key and meta_value?

meta\\u值保存到事件中。我已成功显示它们:

get_post_meta($post->ID, \'event_year\', true); // \'2011\'  

2 个回复
最合适的回答,由SO网友:scribu 整理而成

这是因为“meta\\u key”和“meta\\u value”不是公共查询变量。换句话说,你不能直接在URL中使用它们,你也不应该这样。

相反,请注册一个特定的查询变量,如下所示:

function register_my_qv() {
  global $wp;
  $wp->add_query_var( \'my_qv\' );
}
add_action( \'init\', \'register_my_qv\' );
然后,您可以转到如下URL:?my_qv=foobar

现在需要做的就是将查询变量映射到要执行的实际查询:

function map_my_qv( $wp_query ) {
  if ( $meta_value = $wp_query->get( \'my_qv\' ) ) {
    $wp_query->set( \'meta_key\', \'some_meta_key\' );
    $wp_query->set( \'meta_value\', $meta_value );
  }
}
add_action( \'parse_query\', \'map_my_qv\' );

SO网友:certainlyakey

由于声誉不高,我无法对scribu的优秀答案添加评论,但仍然是代码的第二部分(map_my_qv 函数)在处理WP 4.2时,给了我404s,在admin和PHP中丢失了关于$meta_value 未设置变量。因此,以下是经过编辑的代码:

function map_my_qv( $wp_query ) {
    if ( is_admin() || ! $wp_query->is_main_query() ) 
        return; 

    if ( $wp_query->get( \'my_qv1\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key1\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv1\' ) );
    }
    if ( $wp_query->get( \'my_qv2\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key2\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv2\' ) );
    }
}
add_action( \'parse_query\', \'map_my_qv\' );

结束

相关推荐

我无法在我的自定义POST类型查询中设置META_KEY - 小码农CODE - 行之有效找到问题解决它

我无法在我的自定义POST类型查询中设置META_KEY

时间:2011-07-07 作者:Matt

我已经创建了一个自定义帖子,events, 并保存了元数据event_year 对每个事件。我想得到一年的活动档案。当我转到以下URL时meta_keymeta_value 由于某种原因未设置,因此未过滤事件存档。

/?post_type=events&meta_key=event_year&meta_value=2011
调试值:

echo $wp_query->query_vars[\'post_type\']; // \'events\'
echo $wp_query->query_vars[\'meta_key\']; // -blank-
echo $wp_query->query_vars[\'meta_value\']; // -blank-

Why can\'t I set the meta_key and meta_value?

meta\\u值保存到事件中。我已成功显示它们:

get_post_meta($post->ID, \'event_year\', true); // \'2011\'  

2 个回复
最合适的回答,由SO网友:scribu 整理而成

这是因为“meta\\u key”和“meta\\u value”不是公共查询变量。换句话说,你不能直接在URL中使用它们,你也不应该这样。

相反,请注册一个特定的查询变量,如下所示:

function register_my_qv() {
  global $wp;
  $wp->add_query_var( \'my_qv\' );
}
add_action( \'init\', \'register_my_qv\' );
然后,您可以转到如下URL:?my_qv=foobar

现在需要做的就是将查询变量映射到要执行的实际查询:

function map_my_qv( $wp_query ) {
  if ( $meta_value = $wp_query->get( \'my_qv\' ) ) {
    $wp_query->set( \'meta_key\', \'some_meta_key\' );
    $wp_query->set( \'meta_value\', $meta_value );
  }
}
add_action( \'parse_query\', \'map_my_qv\' );

SO网友:certainlyakey

由于声誉不高,我无法对scribu的优秀答案添加评论,但仍然是代码的第二部分(map_my_qv 函数)在处理WP 4.2时,给了我404s,在admin和PHP中丢失了关于$meta_value 未设置变量。因此,以下是经过编辑的代码:

function map_my_qv( $wp_query ) {
    if ( is_admin() || ! $wp_query->is_main_query() ) 
        return; 

    if ( $wp_query->get( \'my_qv1\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key1\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv1\' ) );
    }
    if ( $wp_query->get( \'my_qv2\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key2\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv2\' ) );
    }
}
add_action( \'parse_query\', \'map_my_qv\' );

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在

我无法在我的自定义POST类型查询中设置META_KEY - 小码农CODE - 行之有效找到问题解决它

我无法在我的自定义POST类型查询中设置META_KEY

时间:2011-07-07 作者:Matt

我已经创建了一个自定义帖子,events, 并保存了元数据event_year 对每个事件。我想得到一年的活动档案。当我转到以下URL时meta_keymeta_value 由于某种原因未设置,因此未过滤事件存档。

/?post_type=events&meta_key=event_year&meta_value=2011
调试值:

echo $wp_query->query_vars[\'post_type\']; // \'events\'
echo $wp_query->query_vars[\'meta_key\']; // -blank-
echo $wp_query->query_vars[\'meta_value\']; // -blank-

Why can\'t I set the meta_key and meta_value?

meta\\u值保存到事件中。我已成功显示它们:

get_post_meta($post->ID, \'event_year\', true); // \'2011\'  

2 个回复
最合适的回答,由SO网友:scribu 整理而成

这是因为“meta\\u key”和“meta\\u value”不是公共查询变量。换句话说,你不能直接在URL中使用它们,你也不应该这样。

相反,请注册一个特定的查询变量,如下所示:

function register_my_qv() {
  global $wp;
  $wp->add_query_var( \'my_qv\' );
}
add_action( \'init\', \'register_my_qv\' );
然后,您可以转到如下URL:?my_qv=foobar

现在需要做的就是将查询变量映射到要执行的实际查询:

function map_my_qv( $wp_query ) {
  if ( $meta_value = $wp_query->get( \'my_qv\' ) ) {
    $wp_query->set( \'meta_key\', \'some_meta_key\' );
    $wp_query->set( \'meta_value\', $meta_value );
  }
}
add_action( \'parse_query\', \'map_my_qv\' );

SO网友:certainlyakey

由于声誉不高,我无法对scribu的优秀答案添加评论,但仍然是代码的第二部分(map_my_qv 函数)在处理WP 4.2时,给了我404s,在admin和PHP中丢失了关于$meta_value 未设置变量。因此,以下是经过编辑的代码:

function map_my_qv( $wp_query ) {
    if ( is_admin() || ! $wp_query->is_main_query() ) 
        return; 

    if ( $wp_query->get( \'my_qv1\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key1\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv1\' ) );
    }
    if ( $wp_query->get( \'my_qv2\' ) ) {
        $wp_query->set( \'meta_key\', \'my_meta_key2\' );
        $wp_query->set( \'meta_value\', $wp_query->get( \'my_qv2\' ) );
    }
}
add_action( \'parse_query\', \'map_my_qv\' );

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在