Switch language

wpseek.com
A WordPress-centric search engine for devs and theme authors




wp_insert_post [ WordPress Function ]

wp_insert_post ( $postarr, $wp_error = false )
Parameters:
  • (array) $postarr Elements that make up post to insert.
  • (bool) $wp_error Optional. Allow return of WP_Error on failure.
Uses:
Returns:
  • (int|WP_Error) The value 0 or WP_Error on failure. The post ID on success.
Defined at:



Insert a post.

If the $postarr parameter has 'ID' set to a value, then post will be updated.

You can set the post date manually, but setting the values for 'post_date' and 'post_date_gmt' keys. You can close the comments or open the comments by setting the value for 'comment_status' key.

The defaults for the parameter $postarr are: 'post_status' - Default is 'draft'. 'post_type' - Default is 'post'. 'post_author' - Default is current user ID ($user_ID). The ID of the user who added the post. 'ping_status' - Default is the value in 'default_ping_status' option. Whether the attachment can accept pings. 'post_parent' - Default is 0. Set this for the post it belongs to, if any. 'menu_order' - Default is 0. The order it is displayed. 'to_ping' - Whether to ping. 'pinged' - Default is empty string. 'post_password' - Default is empty string. The password to access the attachment. 'guid' - Global Unique ID for referencing the attachment. 'post_content_filtered' - Post content filtered. 'post_excerpt' - Post excerpt.

Source


<?php
function wp_insert_post($postarr$wp_error false) {
    global 
$wpdb$user_ID;

    
$defaults = array('post_status' => 'draft''post_type' => 'post''post_author' => $user_ID,
        
'ping_status' => get_option('default_ping_status'), 'post_parent' => 0,
        
'menu_order' => 0'to_ping' =>  '''pinged' => '''post_password' => '',
        
'guid' => '''post_content_filtered' => '''post_excerpt' => '''import_id' => 0,
        
'post_content' => '''post_title' => '');

    
$postarr wp_parse_args($postarr$defaults);

    unset( 
$postarr'filter' ] );

    
$postarr sanitize_post($postarr'db');

    
// export array as variables
    
extract($postarrEXTR_SKIP);

    
// Are we updating or creating?
    
$update false;
    if ( !empty(
$ID) ) {
        
$update true;
        
$previous_status get_post_field('post_status'$ID);
    } else {
        
$previous_status 'new';
    }

    
$maybe_empty = ! $post_content && ! $post_title && ! $post_excerpt && post_type_supports$post_type'editor' )
        && 
post_type_supports$post_type'title' ) && post_type_supports$post_type'excerpt' );
    if ( 
apply_filters'wp_insert_post_empty_content'$maybe_empty$postarr ) ) {
        if ( 
$wp_error )
            return new 
WP_Error'empty_content'__'Content, title, and excerpt are empty.' ) );
        else
            return 
0;
    }

    if ( empty(
$post_type) )
        
$post_type 'post';

    if ( empty(
$post_status) )
        
$post_status 'draft';

    if ( !empty(
$post_category) )
        
$post_category array_filter($post_category); // Filter out empty terms

    // Make sure we set a valid category.
    
if ( empty($post_category) || == count($post_category) || !is_array($post_category) ) {
        
// 'post' requires at least one category.
        
if ( 'post' == $post_type && 'auto-draft' != $post_status )
            
$post_category = array( get_option('default_category') );
        else
            
$post_category = array();
    }

    if ( empty(
$post_author) )
        
$post_author $user_ID;

    
$post_ID 0;

    
// Get the post ID and GUID
    
if ( $update ) {
        
$post_ID = (int) $ID;
        
$guid get_post_field'guid'$post_ID );
        
$post_before get_post($post_ID);
    }

    
// Don't allow contributors to set the post slug for pending review posts
    
if ( 'pending' == $post_status && !current_user_can'publish_posts' ) )
        
$post_name '';

    
// Create a valid post name. Drafts and pending posts are allowed to have an empty
    // post name.
    
if ( empty($post_name) ) {
        if ( !
in_array$post_status, array( 'draft''pending''auto-draft' ) ) )
            
$post_name sanitize_title($post_title);
        else
            
$post_name '';
    } else {
        
// On updates, we need to check to see if it's using the old, fixed sanitization context.
        
$check_name sanitize_title$post_name'''old-save' );
        if ( 
$update && strtolowerurlencode$post_name ) ) == $check_name && get_post_field'post_name'$ID ) == $check_name )
            
$post_name $check_name;
        else 
// new post, or slug has changed.
            
$post_name sanitize_title($post_name);
    }

    
// If the post date is empty (due to having been new or a draft) and status is not 'draft' or 'pending', set date to now
    
if ( empty($post_date) || '0000-00-00 00:00:00' == $post_date )
        
$post_date current_time('mysql');

    if ( empty(
$post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {
        if ( !
in_array$post_status, array( 'draft''pending''auto-draft' ) ) )
            
$post_date_gmt get_gmt_from_date($post_date);
        else
            
$post_date_gmt '0000-00-00 00:00:00';
    }

    if ( 
$update || '0000-00-00 00:00:00' == $post_date ) {
        
$post_modified     current_time'mysql' );
        
$post_modified_gmt current_time'mysql');
    } else {
        
$post_modified     $post_date;
        
$post_modified_gmt $post_date_gmt;
    }

    if ( 
'publish' == $post_status ) {
        
$now gmdate('Y-m-d H:i:59');
        if ( 
mysql2date('U'$post_date_gmtfalse) > mysql2date('U'$nowfalse) )
            
$post_status 'future';
    } elseif( 
'future' == $post_status ) {
        
$now gmdate('Y-m-d H:i:59');
        if ( 
mysql2date('U'$post_date_gmtfalse) <= mysql2date('U'$nowfalse) )
            
$post_status 'publish';
    }

    if ( empty(
$comment_status) ) {
        if ( 
$update )
            
$comment_status 'closed';
        else
            
$comment_status get_option('default_comment_status');
    }
    if ( empty(
$ping_status) )
        
$ping_status get_option('default_ping_status');

    if ( isset(
$to_ping) )
        
$to_ping sanitize_trackback_urls$to_ping );
    else
        
$to_ping '';

    if ( ! isset(
$pinged) )
        
$pinged '';

    if ( isset(
$post_parent) )
        
$post_parent = (int) $post_parent;
    else
        
$post_parent 0;

    
// Check the post_parent to see if it will cause a hierarchy loop
    
$post_parent apply_filters'wp_insert_post_parent'$post_parent$post_IDcompactarray_keys$postarr ) ), $postarr );

    if ( isset(
$menu_order) )
        
$menu_order = (int) $menu_order;
    else
        
$menu_order 0;

    if ( !isset(
$post_password) || 'private' == $post_status )
        
$post_password '';

    
$post_name wp_unique_post_slug($post_name$post_ID$post_status$post_type$post_parent);

    
// expected_slashed (everything!)
    
$data compact( array( 'post_author''post_date''post_date_gmt''post_content''post_content_filtered''post_title''post_excerpt''post_status''post_type''comment_status''ping_status''post_password''post_name''to_ping''pinged''post_modified''post_modified_gmt''post_parent''menu_order''guid' ) );
    
$data apply_filters('wp_insert_post_data'$data$postarr);
    
$data stripslashes_deep$data );
    
$where = array( 'ID' => $post_ID );

    if ( 
$update ) {
        
do_action'pre_post_update'$post_ID );
        if ( 
false === $wpdb->update$wpdb->posts$data$where ) ) {
            if ( 
$wp_error )
                return new 
WP_Error('db_update_error'__('Could not update post in the database'), $wpdb->last_error);
            else
                return 
0;
        }
    } else {
        if ( isset(
$post_mime_type) )
            
$data['post_mime_type'] = stripslashes$post_mime_type ); // This isn't in the update
        // If there is a suggested ID, use it if not already present
        
if ( !empty($import_id) ) {
            
$import_id = (int) $import_id;
            if ( ! 
$wpdb->get_var$wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE ID = %d"$import_id) ) ) {
                
$data['ID'] = $import_id;
            }
        }
        if ( 
false === $wpdb->insert$wpdb->posts$data ) ) {
            if ( 
$wp_error )
                return new 
WP_Error('db_insert_error'__('Could not insert post into the database'), $wpdb->last_error);
            else
                return 
0;
        }
        
$post_ID = (int) $wpdb->insert_id;

        
// use the newly generated $post_ID
        
$where = array( 'ID' => $post_ID );
    }

    if ( empty(
$data['post_name']) && !in_array$data['post_status'], array( 'draft''pending''auto-draft' ) ) ) {
        
$data['post_name'] = sanitize_title($data['post_title'], $post_ID);
        
$wpdb->update$wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
    }

    if ( 
is_object_in_taxonomy($post_type'category') )
        
wp_set_post_categories$post_ID$post_category );

    if ( isset( 
$tags_input ) && is_object_in_taxonomy($post_type'post_tag') )
        
wp_set_post_tags$post_ID$tags_input );

    
// new-style support for all custom taxonomies
    
if ( !empty($tax_input) ) {
        foreach ( 
$tax_input as $taxonomy => $tags ) {
            
$taxonomy_obj get_taxonomy($taxonomy);
            if ( 
is_array($tags) ) // array = hierarchical, string = non-hierarchical.
                
$tags array_filter($tags);
            if ( 
current_user_can($taxonomy_obj->cap->assign_terms) )
                
wp_set_post_terms$post_ID$tags$taxonomy );
        }
    }

    
$current_guid get_post_field'guid'$post_ID );

    
clean_post_cache$post_ID );

    
// Set GUID
    
if ( !$update && '' == $current_guid )
        
$wpdb->update$wpdb->posts, array( 'guid' => get_permalink$post_ID ) ), $where );

    
$post get_post($post_ID);

    if ( !empty(
$page_template) && 'page' == $data['post_type'] ) {
        
$post->page_template $page_template;
        
$page_templates get_page_templates();
        if ( 
'default' != $page_template && !in_array($page_template$page_templates) ) {
            if ( 
$wp_error )
                return new 
WP_Error('invalid_page_template'__('The page template is invalid.'));
            else
                return 
0;
        }
        
update_post_meta($post_ID'_wp_page_template',  $page_template);
    }

    
wp_transition_post_status($data['post_status'], $previous_status$post);

    if ( 
$update ) {
        
do_action('edit_post'$post_ID$post);
        
$post_after get_post($post_ID);
        
do_action'post_updated'$post_ID$post_after$post_before);
    }

    
do_action('save_post'$post_ID$post);
    
do_action('wp_insert_post'$post_ID$post);

    return 
$post_ID;
}
?>

Examples [ wp-snippets.com ]

Top Google Search Results

More ...

0 User Note(s)

None yet. Be the first!

Add New ...



HTML5 Powered with CSS3 / Styling, Performance & Integration, and Semantics