META_QUERY COMPARE“=”似乎应该不返回任何内容

时间:2021-10-13 作者:dgl

正在尝试基于表单提交进行查询。表单上的一个select包含:

wp_dropdown_categories( \'name=specialty&taxonomy=specialties&orderby=name&show_option_none=Select a Specialty&show_none_value=-1&selected=\'.$p_specialty );
然后获取专业值并创建一个数组:

if (isset($_GET[\'specialty\']) && !empty($_GET[\'specialty\']) && $_GET[\'specialty\'] > 0 ) {
    $specialty = true;
    ++$qs_count;
    $p_specialty = $_GET[\'specialty\'];
    $p_specialty_array = array (
        \'key\' => \'specialties\',
        \'value\' => $p_specialty,
        \'compare\' => \'LIKE\',
    );
    $term_specialty = get_term($p_specialty);
    $term_specialty = $term_specialty->name; 
}
$p\\u specialty\\u阵列随后用于:

$meta_query = array (
        \'relation\'      => \'AND\',
        array (
            \'q_last\'        => array (
                \'key\'       => \'provider_name_last_name\',
            ),
            \'q_first\'       => array (
                \'key\'       => \'provider_name_first_name\',
            ),
            \'compare\'       => \'IN\',
            $p_fname_array,
            $p_lname_array,
            $p_new_array,
            $p_gender_array,
            $p_clinic_array,
            $p_specialty_array,
        ),
    );
但这会导致一个问题,因为一个专业的ID是20,另一个是204。当使用compare=将表单提交给specialty=20时,它会返回specialty为20或204(而不仅仅是20)的帖子。

当我将比较改为“=”时,即使有专业=20的帖子,也不会返回任何内容。

我还尝试将value\\u field=\'slug\'添加到wp\\u下拉列表\\u类别中,但不知道如何实现这一点(这可能可行,我只是不知道在使用slug时如何编写数组)。

我当然更喜欢一种只获取“=”值而不是“LIKE”的方法,以避免此类问题,但无法使其正常工作。

“我如何使用compare”完成此操作="E;,或者别的什么,我只选了专业?

Update

我尝试了以下方法,但结果都是空的:

if (isset($_GET[\'specialty\']) && !empty($_GET[\'specialty\']) && $_GET[\'specialty\'] > 0 ) {
    $specialty = true;
    ++$qs_count;
    $p_specialty = $_GET[\'specialty\'];
    $p_spec_minus = $p_specialty - 1;
    $p_specialty_plus = $p_specialty + 1;
    echo \'plus: \'.$p_specialty_plus;
    $p_specialty_array = array (
        \'key\' => \'specialties\',
        \'value\' => array( $p_spec_minus, $p_specialty_plus),
        \'compare\' => \'BETWEEN\',
    );
    $term_specialty = get_term($p_specialty);
    $term_specialty = $term_specialty->name;
}
在下一篇文章中,我尝试对20个进行硬编码,但结果都是空的:

if (isset($_GET[\'specialty\']) && !empty($_GET[\'specialty\']) && $_GET[\'specialty\'] > 0 ) {
    $specialty = true;
    ++$qs_count;
    $p_specialty = $_GET[\'specialty\'];
    echo \'plus: \'.$p_specialty_plus;
    $p_specialty_array = array (
        \'key\' => \'specialties\',
        \'value\' => \'20\',
        \'compare\' => \'=\',
    );
    $term_specialty = get_term($p_specialty);
    $term_specialty = $term_specialty->name;
}
我很困惑为什么这不起作用。

1 个回复
SO网友:dgl

从一条评论中找到了答案here.

解决方案是更改以下内容:

\'value\' => $p_specialty,
。。。对此:

\'value\' => \'"\'.$p_specialty.\'"\',
。。。让类似的比较保持原样。

为了获得更多信息,我还尝试序列化该值,但没有成功。

相关推荐

Get full image array

当我使用高级自定义字段时,我可以返回上载的完整图像数组。是否有本机WordPress方法可以通过图像ID获取媒体库中任何图像的完整图像阵列?我可以找到方法来获取alt文本和特定的图像大小,但不能获取数组本身。。。