WordPress.org

Make WordPress Core

Opened 2 years ago

Last modified 5 months ago

#37406 accepted enhancement

Add ability to specify post_type in post_exists function - post.php

Reported by: sgarza Owned by: swissspidy
Milestone: 5.0 Priority: low
Severity: normal Version: 4.5.3
Component: Posts, Post Types Keywords: has-patch has-unit-tests
Focuses: Cc:

Description

Currently post_exists() has no way of refining the query down to a particular post type. Adding a fourth argument to specify a post type would make this function more useful for custom post type development.

<?php
function post_exists($title, $content = '', $date = '', $type = '') {
        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' ) );

        $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 ( $args ) )
                return (int) $wpdb->get_var( $wpdb->prepare($query, $args) );

        return 0;
}

Attachments (4)

37406.patch (1.4 KB) - added by sgarza 15 months ago.
Added suggested patch
37406.2.patch (725 bytes) - added by birgire 9 months ago.
37406.2.test.patch (1.1 KB) - added by birgire 9 months ago.
37406.3.diff (3.0 KB) - added by birgire 5 months ago.

Download all attachments as: .zip

Change History (11)

#1 @sgarza
2 years ago

  • Keywords has-patch added

@sgarza
15 months ago

Added suggested patch

#2 @sgarza
15 months ago

  • Keywords needs-unit-tests added

@birgire
9 months ago

#3 @birgire
9 months ago

  • Keywords has-unit-tests added; needs-unit-tests removed

Added two tests in 37406.2.test.patch regarding the post type modifications in 37406.patch.

#4 @birgire
9 months ago

I wonder if this check:

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

should be applied in 37406.patch, to make sure the post type exists?

But it feels unnecessary...

#5 @swissspidy
5 months ago

  • Keywords needs-refresh added
  • Milestone changed from Awaiting Review to Future Release
  • Priority changed from normal to low

Needs some docs improvements (adding stuff like @since) and a refresh to adhere to coding standards. Otherwise this looks reasonable.

@birgire
5 months ago

#6 @birgire
5 months ago

  • Keywords needs-refresh removed

In 37406.3.diff:

  • Refreshed and combined the patch and tests into a single patch.
  • Added @since in the docBlock.
  • Adjusted according to the WPCS.

#7 @swissspidy
5 months ago

  • Milestone changed from Future Release to 5.0
  • Owner set to swissspidy
  • Status changed from new to accepted
Note: See TracTickets for help on using tickets.