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
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()
//
// @see: http://bbpress.trac.wordpress.org/ticket/2185/
// @see: http://core.trac.wordpress.org/changeset/23973/
$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
| 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.