检查重力表单中的重复条目


Check for duplicate entries in Gravity Forms

我正在做一个扩展重力表单的WordPress插件。我需要添加一些功能来检查重复条目。我使用GFAPI::get_entries( $form_id, $search_criteria );来查找并列出与我的Gravity表单相关的符合特定搜索条件的所有条目。下面是一段代码:

// Fetch field_ids, establish search criteria
    $first_id = $last_id = $address_id = 0;
    foreach ( $form['fields'] as $field ) {
        if ( $field->get_input_type() == 'name' ) {
            $first_id = $field->id . '.3';
            $last_id  = $field->id . '.6';
            break;
        }
    }
    foreach ( $form['fields'] as $field ) {
        if ( $field->get_input_type() == 'address' ) {
            $address_id = $field->id . '.1';
            break;
        }
    }
    $search_criteria['field_filters'] = array(
        array( 'key' => $first_id, 'value' => $data['voterdata_FirstName'] ),
        array( 'key' => $last_id, 'value' => $data['voterdata_LastName'] ),
        array( 'key' => $address_id, 'value' => $data['voterdata_VoterAddress'] )
    );
    $search_criteria['status'] = 'active';
    $entries = GFAPI::get_entries( $form_id, $search_criteria );

$entriesvar_dump();返回我的表单中满足搜索条件的所有条目。如果存在多个包含相同名、姓和地址组合的条目,我希望将用户重定向到另一个页面,以便他们可以确认哪个条目属于他们。检查$entries是否重复的最佳方法是什么?

提前致谢

您可以使用in_array

的例子:

<?php
$results = [
    ['firstName' => 'Bob', 'lastName' => 'Dole', 'address' => '123 Test'],
    ['firstName' => 'Jon', 'lastName' => 'Doe', 'address' => '444 Foo'],
    ['firstName' => 'Bob', 'lastName' => 'Dole', 'address' => '333 Test']
];
$test = ['firstName' => 'Bob', 'lastName' => 'Dole', 'address' => '123 Test'];
$test2 = ['firstName' => 'Jon', 'lastName' => 'Dole', 'address' => '999 Test'];
$test3 = ['lastName' => 'Jon', 'firstName' => 'Dole', 'address' => '999 Test'];
var_dump(in_array($test, $results));   // This should match
var_dump(in_array($test2, $results));  // This should not match
var_dump(in_array($test3, $results));  // This should not match
输出:

bool(true)
bool(false)
bool(false)

编辑

刚刚发现你已经在搜索…在这种情况下,如果$entries不为空,则可以使用wp_redirect()…我假设你在插入数据之前检查数据,对吗?

我发现了一个解决方案:

if ( count( array_unique( $entries ) ) < count( $entries ) ) {
        # do something ...
    }

当然,这不是唯一的方法。但希望它能帮助到别人!