【问题标题】:Wordpress WP_Query with meta_query get values by Like带有 meta_query 的 Wordpress WP_Query 通过 Like 获取值
【发布时间】:2014-01-09 06:15:50
【问题描述】:

我正在构建自定义搜索。 在这一点上,我正在尝试获取应将搜索文本用作通配符以在 2 个 meta_key 内进行比较的帖子。

下面是我的代码,

<?php $args = (

    array(
        'post_type' => 'registration',
        'meta_key'=>'rg_upload_video',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key' => 'rg_first_name',
                'value' => $s,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'rg_last_name',
                'value' => $s,
                'compare' => 'LIKE'
            )
        ),
        'posts_per_page' => 12,
        'paged' => get_query_var('paged') ? get_query_var('paged') : 1 )
    );

        $loop = new WP_Query($args);

?>

因此,它只是返回所有具有 Meta_keyrg_upload_video 的帖子。我需要在 meta_key rg_first_namerg_last_name 中搜索过文本的帖子。

有人知道我哪里出错了吗?

【问题讨论】:

  • 你试过删除'meta_key'=&gt;'rg_upload_video',吗?
  • 不,因为这是第一个条件。帖子应该有这个元键,第二个条件是按名称(名字/姓氏)过滤它们
  • 我不认为你可以在同一个meta_query 中同时使用ANDOR

标签: wordpress wildcard sql-like meta-key


【解决方案1】:

您可以执行两个WP_Query 查询。在第一个中,您选择所有具有rg_upload_video 元键的内容。然后你做另一个 WP_Query 只搜索在第一个查询中获得的帖子。未经测试,但应该如下所示:

$args = array(
    'post_type' => 'registration',
    'posts_per_page' => -1,
    'meta_key'=>'rg_upload_video',
);

$videos = new WP_Query($args);

# get list of posts containing meta key rg_upload_video
$post_ids = wp_list_pluck( $videos->posts, 'ID' );

# You then do another WP_Query to get the posts having postmeta first name or last nav_menu_description

$args = array(
    'post_type' => 'registration',
    'post__in' => $post_ids,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'rg_first_name',
            'value' => $s,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'rg_last_name',
            'value' => $s,
            'compare' => 'LIKE'
        )
    ),
    'posts_per_page' => 12,
    'paged' => get_query_var('paged') ? get_query_var('paged') : 1 )
);

$loop = new WP_Query($args);

【讨论】:

  • 自定义 SQL 查询将比不必要地运行 2 个 WP_Query 更好。
  • 如果您经常需要查询,也可以使用瞬态来存储帖子 ID
【解决方案2】:

尝试运行以下代码。

<?php $args =  array(
        'post_type' => 'registration',
        'meta_query' => array(
            'relation' => 'AND',
            array(
              'relation' => 'OR',
              array(
                'key' => 'rg_first_name',
                'value' => $s,
                'compare' => 'LIKE'
              ),
              array(
                'key' => 'rg_last_name',
                'value' => $s,
                'compare' => 'LIKE'
              )
            ),
            array(
               'key' => 'rg_upload_video',
               'compare' => 'EXISTS' 
            )
        ),
        'posts_per_page' => 12,
        'paged' => get_query_var('paged') ? get_query_var('paged') : 1 )
    );

        $loop = new WP_Query($args);

?>

【讨论】:

  • 这不是真的。 AFAIK,您不能在 meta_query 中放置两个关系
  • 那么我猜,如果上述查询不起作用,自定义 SQL 查询是唯一的方法。
  • 不,WP_Query 就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多