WordPress: So erstellen Sie ein eindeutiges Feld mit ACF und benutzerdefiniertem Beitragstyp

Lesezeit: 3 Minuten

Also arbeite ich an einem benutzerdefinierten Beitragstyp, um mit erweiterten benutzerdefinierten Feldern zusammenzuarbeiten. Und ich habe dieses kleine Skript, das verhindern soll, dass doppelte E-Mails eingegeben werden. Aber das Script funktioniert nicht so wie ich es möchte.

Der Code, den Sie unten sehen, ist für die benutzerdefinierte Beitragstypseite, die ich mit ACF verknüpft habe.

function init_members() {
    $labels = array(
        'name'               => 'Members',
        'singular_name'      => 'Member',
        'menu_name'          => 'Members',
        'name_admin_bar'     => 'Member',
        'add_new'            => 'New member',
        'add_new_item'       => 'New member',
        'new_item'           => 'New member',
        'edit_item'          => 'Edit member',
        'all_items'          => 'All members',
        'search_items'       => 'Search member',
        'not_found'          => 'No members found',
        'not_found_in_trash' => 'No members found in trash'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'exclude_from_search' => true,
        'rewrite' => array('slug' => 'member'),
        'has_archive' => false,
        'supports' => array('title'),
        'show_in_rest' => true,
        'menu_icon' => 'dashicons-groups'

    );
    register_post_type('members', $args);
}
add_action('init', 'init_members');

function add_member_columns ( $columns ) {
    unset($columns['date']);
    return array_merge ( $columns, array (
        'contactperson'   => __ ( 'Contactperson' ),
        'phone_number'   => __ ( 'Phonenumber' ),
        'email'   => __ ( 'Email' ),
    ) );
}
add_filter ('manage_members_posts_columns', 'add_member_columns' );

function fill_member_columns ( $column, $post_id ) {
    switch ( $column ) {
        case 'contactperson':
            echo get_post_meta ( $post_id, 'contactperson', true );
            break;
        case 'phone_number':
            echo get_post_meta ( $post_id, 'phone_number', true );
            break;
        case 'email':
            echo get_post_meta ( $post_id, 'email', true );
            break;
    }
}
add_action ('manage_members_posts_custom_column', 'fill_member_columns', 10, 2 );

Das Skript, das ich habe, um die Verwendung doppelter E-Mails zu filtern, lautet also wie folgt. die Quelle, wo ich es her habe, ist Hier

add_filter('acf/validate_value/name="."email', 'acf_unique_value_field', 10, 4);

function acf_unique_value_field($valid, $value, $field, $input) {
    if (!$valid || (!isset($_POST['post_ID']) && !isset($_POST['post_id']))) {
        return $valid;
    }
    if (isset($_POST['post_ID'])) {
        $post_id = intval($_POST['post_ID']);
    } else {
        $post_id = intval($_POST['post_id']);
    }
    if (!$post_id) {
        return $valid;
    }
    $post_type = get_post_type($post_id);
    $field_name = $field['name'];
    $args = array(
        'post_type' => $post_type,
        'post_status' => 'publish, draft, trash',
        'post__not_in' => array($post_id),
        'meta_query' => array(
            array(
                'key' => 'email',
                'value' => $value
            )
        )
    );
    $query = new WP_Query($args);
    if (count($query->posts)){
        return 'This Value is not Unique. Please enter a unique '.$field['label'];
    }
    return true;
}

Wahrscheinlich übersehe ich etwas ziemlich Offensichtliches. Aber ich kann nicht finden, was ich beaufsichtige.

Ich denke, das Problem könnte sein, dass Sie nicht abfragen alle bestehende Beiträge. Wenn Ihre Posts pro Seite standardmäßig auf 5 konfiguriert ist und der 6. Post dieselbe E-Mail-Adresse wie der aktualisierte hat, findet Ihre Überprüfung keine übereinstimmenden Posts.

Versuchen Sie Folgendes: ein acf_unique_value_field()korrigieren Sie Ihre Abfrage wie folgt:

    $args = array(
        'post_type' => $post_type,
        'post_status' => 'publish, draft, trash',
        'post__not_in' => array($post_id),
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'email',
                'value' => $value
            )
        )
    );
    $query = new WP_Query($args);

'posts_per_page' => -1, wird eine unbegrenzte Anzahl von Beiträgen abfragen.

Außerdem habe ich gesehen, dass Sie verwenden get_post_meta zum Abrufen von ACF-Feldwerten. Ich rate davon ab. Verwenden Sie ACFs get_field stattdessen (und update_field zur Aktualisierung bei Bedarf).

  • Vielen Dank, das hat es vollständig behoben. die ‘posts_per_page’ => -1,

    – Ast

    27. Februar 2020 um 12:12 Uhr


998430cookie-checkWordPress: So erstellen Sie ein eindeutiges Feld mit ACF und benutzerdefiniertem Beitragstyp

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy