VOOZH about

URL: https://developer.wordpress.org/reference/functions/post_exists/

⇱ post_exists() – Function | Developer.WordPress.org


Skip to content

WordPress Developer Resources

post_exists()

post_exists( string $title, string $content = '', string $date = '', string $type = '', string $status = '' ): int

Determines if a post exists based on title, content, date and type.

Parameters

$titlestringrequired
Post title.
$contentstringoptional
Post content.

Default:''

$datestringoptional
Post date.

Default:''

$typestringoptional
Post type.

Default:''

$statusstringoptional
Post status.

Default:''

Return

int Post ID if post exists, 0 otherwise.

Source

function post_exists( $title, $content = '', $date = '', $type = '', $status = '' ) {
	global $wpdb;

	$post_title = wp_unslash( sanitize_post_field( 'post_title', $title, 0, 'db' ) );
	$post_content = wp_unslash( sanitize_post_field( 'post_content', $content, 0, 'db' ) );
	$post_date = wp_unslash( sanitize_post_field( 'post_date', $date, 0, 'db' ) );
	$post_type = wp_unslash( sanitize_post_field( 'post_type', $type, 0, 'db' ) );
	$post_status = wp_unslash( sanitize_post_field( 'post_status', $status, 0, 'db' ) );

	$query = "SELECT ID FROM $wpdb->posts WHERE 1=1";
	$args = array();

	if ( ! empty( $date ) ) {
		$query .= ' AND post_date = %s';
		$args[] = $post_date;
	}

	if ( ! empty( $title ) ) {
		$query .= ' AND post_title = %s';
		$args[] = $post_title;
	}

	if ( ! empty( $content ) ) {
		$query .= ' AND post_content = %s';
		$args[] = $post_content;
	}

	if ( ! empty( $type ) ) {
		$query .= ' AND post_type = %s';
		$args[] = $post_type;
	}

	if ( ! empty( $status ) ) {
		$query .= ' AND post_status = %s';
		$args[] = $post_status;
	}

	if ( ! empty( $args ) ) {
		return (int) $wpdb->get_var( $wpdb->prepare( $query, $args ) );
	}

	return 0;
}

View all references View on Trac View on GitHub

Related

UsesDescription
sanitize_post_field()wp-includes/post.php

Sanitizes a post field based on context.

wp_unslash()wp-includes/formatting.php

Removes slashes from a string or recursively removes slashes from strings within an array.

wpdb::get_var()wp-includes/class-wpdb.php

Retrieves one value from the database.

wpdb::prepare()wp-includes/class-wpdb.php

Prepares a SQL query for safe execution.

Show 2 moreShow less

Changelog

VersionDescription
5.8.0Added the $status parameter.
5.2.0Added the $type parameter.
2.0.0Introduced.

User Contributed Notes

  1. Skip to note 3 content

    Check if post exist by title :

    $fount_post = post_exists( "My Post Title",'','','');
    	echo $fount_post ? "Found post at id #$fount_post" : "Can't find post!";

    Check if custom post type [news] exist by title :

    $fount_post = post_exists( "My Post Title",'','','news');
    	echo $fount_post ? "Found post at id #$fount_post" : "Can't find post!";
  2. Skip to note 4 content

    This function require following code to be added so please add this line as well so user didn’t get function not defined error while using post_exists function.

    if ( ! function_exists( 'post_exists' ) ) {
     require_once ABSPATH . 'wp-admin/includes/post.php';
    }

You must log in before being able to contribute a note or feedback.