bbp_check_for_duplicate( array $post_data = array() )

Check for duplicate topics/replies

Description

Check to make sure that a user is not making a duplicate post

Parameters

$post_data

(Optional) Contains information about the comment

Default value: array()

Return

(bool) True if it is not a duplicate, false if it is

Source

File: bp-forums/common/functions.php

687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
function bbp_check_for_duplicate( $post_data = array() ) {
 
    // No duplicate checks for those who can throttle
    if ( current_user_can( 'throttle' ) )
        return true;
 
    // Define global to use get_meta_sql() and get_var() methods
    global $wpdb;
 
    // Parse arguments against default values
    $r = bbp_parse_args( $post_data, array(
        'post_author'    => 0,
        'post_type'      => array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ),
        'post_parent'    => 0,
        'post_content'   => '',
        'post_status'    => bbp_get_trash_status_id(),
        'anonymous_data' => false
    ), 'check_for_duplicate' );
 
    // Check for anonymous post
    if ( empty( $r['post_author'] ) && ( !empty( $r['anonymous_data'] ) && !empty( $r['anonymous_data']['bbp_anonymous_email'] ) ) ) {
        $clauses = get_meta_sql( array( array(
            'key'   => '_bbp_anonymous_email',
            'value' => sanitize_email( $r['anonymous_data']['bbp_anonymous_email'] )
        ) ), 'post', $wpdb->posts, 'ID' );
 
        $join    = $clauses['join'];
        $where   = $clauses['where'];
    } else {
        $join    = $where = '';
    }
 
    // Unslash $r to pass through $wpdb->prepare()
    //
    $r = function_exists( 'wp_unslash' ) ? wp_unslash( $r ) : stripslashes_deep( $r );
 
    // Prepare duplicate check query
    $query  = $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} {$join} WHERE post_type = %s AND post_status != %s AND post_author = %d AND post_content = %s {$where}", $r['post_type'], $r['post_status'], $r['post_author'], $r['post_content'] );
    $query .= !empty( $r['post_parent'] ) ? $wpdb->prepare( " AND post_parent = %d", $r['post_parent'] ) : '';
    $query .= " LIMIT 1";
    $dupe   = apply_filters( 'bbp_check_for_duplicate_query', $query, $r );
 
    if ( $wpdb->get_var( $dupe ) ) {
        do_action( 'bbp_check_for_duplicate_trigger', $post_data );
        return false;
    }
 
    return true;
}

Changelog

Changelog
Version Description
bbPress (r2763) Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.