2004-05-24 03:34:57 +02:00
< ? php
2006-06-08 01:17:59 +02:00
//
// Post functions
//
function get_attached_file ( $attachment_id ) {
return get_post_meta ( $attachment_id , '_wp_attached_file' , true );
}
2006-11-20 05:23:12 +01:00
function & get_children ( $args = '' , $output = OBJECT ) {
2006-11-23 21:39:39 +01:00
global $post_cache , $wpdb , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-11-20 05:23:12 +01:00
if ( empty ( $args ) ) {
2006-06-08 01:17:59 +02:00
if ( isset ( $GLOBALS [ 'post' ]) )
2006-11-20 05:23:12 +01:00
$r = array ( 'post_parent' => & $GLOBALS [ 'post' ] -> post_parent );
2006-06-08 01:17:59 +02:00
else
return false ;
2006-11-20 05:23:12 +01:00
} elseif ( is_object ( $args ) )
$r = array ( 'post_parent' => $post -> post_parent );
elseif ( is_numeric ( $args ) )
$r = array ( 'post_parent' => $args );
elseif ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
2006-06-08 01:17:59 +02:00
2006-11-20 05:23:12 +01:00
$defaults = array ( 'numberposts' => - 1 , 'post_type' => '' , 'post_status' => '' , 'post_parent' => 0 );
$r = array_merge ( $defaults , $r );
2006-06-08 01:17:59 +02:00
2006-11-20 05:23:12 +01:00
$children = get_posts ( $r );
2006-06-08 01:17:59 +02:00
if ( $children ) {
foreach ( $children as $key => $child ) {
2006-11-23 21:39:39 +01:00
$post_cache [ $blog_id ][ $child -> ID ] =& $children [ $key ];
2006-06-08 01:17:59 +02:00
$kids [ $child -> ID ] =& $children [ $key ];
}
} else {
return false ;
}
if ( $output == OBJECT ) {
return $kids ;
} elseif ( $output == ARRAY_A ) {
foreach ( $kids as $kid )
$weeuns [ $kid -> ID ] = get_object_vars ( $kids [ $kid -> ID ]);
return $weeuns ;
} elseif ( $output == ARRAY_N ) {
foreach ( $kids as $kid )
$babes [ $kid -> ID ] = array_values ( get_object_vars ( $kids [ $kid -> ID ]));
return $babes ;
} else {
return $kids ;
}
}
// get extended entry info (<!--more-->)
function get_extended ( $post ) {
2006-08-05 06:11:51 +02:00
//Match the new style more links
if ( preg_match ( '/<!--more(.+?)?-->/' , $post , $matches )) {
list ( $main , $extended ) = explode ( $matches [ 0 ], $post , 2 );
} else {
$main = $post ;
$extended = '' ;
}
2006-06-08 01:17:59 +02:00
// Strip leading and trailing whitespace
$main = preg_replace ( '/^[\s]*(.*)[\s]*$/' , '\\1' , $main );
$extended = preg_replace ( '/^[\s]*(.*)[\s]*$/' , '\\1' , $extended );
return array ( 'main' => $main , 'extended' => $extended );
}
// Retrieves post data given a post ID or post object.
// Handles post caching.
function & get_post ( & $post , $output = OBJECT ) {
2006-11-23 21:39:39 +01:00
global $post_cache , $wpdb , $blog_id ;
2006-06-08 01:17:59 +02:00
if ( empty ( $post ) ) {
if ( isset ( $GLOBALS [ 'post' ]) )
$_post = & $GLOBALS [ 'post' ];
else
$_post = null ;
} elseif ( is_object ( $post ) ) {
if ( 'page' == $post -> post_type )
return get_page ( $post , $output );
2006-11-23 21:39:39 +01:00
if ( ! isset ( $post_cache [ $blog_id ][ $post -> ID ]) )
$post_cache [ $blog_id ][ $post -> ID ] = & $post ;
$_post = & $post_cache [ $blog_id ][ $post -> ID ];
2006-06-08 01:17:59 +02:00
} else {
if ( $_post = wp_cache_get ( $post , 'pages' ) )
return get_page ( $_post , $output );
2006-11-23 21:39:39 +01:00
elseif ( isset ( $post_cache [ $blog_id ][ $post ]) )
$_post = & $post_cache [ $blog_id ][ $post ];
2006-06-08 01:17:59 +02:00
else {
$query = " SELECT * FROM $wpdb->posts WHERE ID = ' $post ' LIMIT 1 " ;
$_post = & $wpdb -> get_row ( $query );
if ( 'page' == $_post -> post_type )
return get_page ( $_post , $output );
2006-11-23 21:39:39 +01:00
$post_cache [ $blog_id ][ $post ] = & $_post ;
2006-06-08 01:17:59 +02:00
}
}
2006-09-20 01:56:28 +02:00
if ( defined ( 'WP_IMPORTING' ) )
2006-11-23 21:39:39 +01:00
unset ( $post_cache [ $blog_id ]);
2006-06-08 01:17:59 +02:00
if ( $output == OBJECT ) {
return $_post ;
} elseif ( $output == ARRAY_A ) {
return get_object_vars ( $_post );
} elseif ( $output == ARRAY_N ) {
return array_values ( get_object_vars ( $_post ));
} else {
return $_post ;
}
}
// Takes a post ID, returns its mime type.
function get_post_mime_type ( $ID = '' ) {
$post = & get_post ( $ID );
if ( is_object ( $post ) )
return $post -> post_mime_type ;
return false ;
}
function get_post_status ( $ID = '' ) {
$post = get_post ( $ID );
if ( is_object ( $post ) ) {
if ( ( 'attachment' == $post -> post_type ) && $post -> post_parent && ( $post -> ID != $post -> post_parent ) )
return get_post_status ( $post -> post_parent );
else
return $post -> post_status ;
}
return false ;
}
function get_post_type ( $post = false ) {
global $wpdb , $posts ;
if ( false === $post )
$post = $posts [ 0 ];
elseif ( ( int ) $post )
$post = get_post ( $post , OBJECT );
if ( is_object ( $post ) )
return $post -> post_type ;
return false ;
}
2006-06-08 04:22:16 +02:00
function get_posts ( $args ) {
global $wpdb ;
if ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
2006-11-20 05:23:12 +01:00
$defaults = array ( 'numberposts' => 5 , 'offset' => 0 , 'category' => 0 ,
'orderby' => 'post_date' , 'order' => 'DESC' , 'include' => '' , 'exclude' => '' ,
'meta_key' => '' , 'meta_value' => '' , 'post_type' => 'post' , 'post_status' => 'publish' , 'post_parent' => 0 );
2006-06-08 04:22:16 +02:00
$r = array_merge ( $defaults , $r );
extract ( $r );
2006-11-20 05:23:12 +01:00
$numberposts = ( int ) $numberposts ;
$offset = ( int ) $offset ;
$category = ( int ) $category ;
$post_parent = ( int ) $post_parent ;
2006-06-08 04:22:16 +02:00
$inclusions = '' ;
if ( ! empty ( $include ) ) {
2006-11-20 05:23:12 +01:00
$offset = 0 ; //ignore offset, category, exclude, meta_key, and meta_value, post_parent if using include
$category = 0 ;
2006-11-19 08:56:05 +01:00
$exclude = '' ;
2006-06-08 04:22:16 +02:00
$meta_key = '' ;
$meta_value = '' ;
2006-11-20 05:23:12 +01:00
$post_parent = 0 ;
2006-06-08 04:22:16 +02:00
$incposts = preg_split ( '/[\s,]+/' , $include );
$numberposts = count ( $incposts ); // only the number of posts included
if ( count ( $incposts ) ) {
foreach ( $incposts as $incpost ) {
if ( empty ( $inclusions ))
$inclusions = ' AND ( ID = ' . intval ( $incpost ) . ' ' ;
else
$inclusions .= ' OR ID = ' . intval ( $incpost ) . ' ' ;
}
}
}
2006-11-19 08:56:05 +01:00
if ( ! empty ( $inclusions ))
$inclusions .= ')' ;
2006-06-08 04:22:16 +02:00
$exclusions = '' ;
if ( ! empty ( $exclude ) ) {
$exposts = preg_split ( '/[\s,]+/' , $exclude );
if ( count ( $exposts ) ) {
foreach ( $exposts as $expost ) {
if ( empty ( $exclusions ))
$exclusions = ' AND ( ID <> ' . intval ( $expost ) . ' ' ;
else
$exclusions .= ' AND ID <> ' . intval ( $expost ) . ' ' ;
}
}
}
2006-11-19 08:56:05 +01:00
if ( ! empty ( $exclusions ))
2006-06-08 04:22:16 +02:00
$exclusions .= ')' ;
$query = " SELECT DISTINCT * FROM $wpdb->posts " ;
2006-11-20 05:23:12 +01:00
$query .= ( empty ( $category ) ? " " : " , $wpdb->post2cat " );
$query .= ( empty ( $meta_key ) ? " " : " , $wpdb->postmeta " );
$query .= " WHERE (post_type = 'post' AND post_status = 'publish') $exclusions $inclusions " ;
$query .= ( empty ( $category ) ? " " : " AND ( $wpdb->posts .ID = $wpdb->post2cat .post_id AND $wpdb->post2cat .category_id = " . $category . " ) " );
$query .= ( empty ( $meta_key ) | empty ( $meta_value ) ? " " : " AND ( $wpdb->posts .ID = $wpdb->postmeta .post_id AND $wpdb->postmeta .meta_key = ' $meta_key ' AND $wpdb->postmeta .meta_value = ' $meta_value ' ) " );
$query .= " GROUP BY $wpdb->posts .ID ORDER BY " . $orderby . " " . $order . " LIMIT " . $offset . ',' . $numberposts ;
$query = " SELECT DISTINCT * FROM $wpdb->posts " ;
$query .= empty ( $category ) ? '' : " , $wpdb->post2cat " ;
$query .= empty ( $meta_key ) ? '' : " , $wpdb->postmeta " ;
$query .= " WHERE 1=1 " ;
$query .= empty ( $post_type ) ? '' : " AND post_type = ' $post_type ' " ;
$query .= empty ( $post_status ) ? '' : " AND post_status = ' $post_status ' " ;
$query .= " $exclusions $inclusions " ;
$query .= empty ( $category ) ? '' : " AND ( $wpdb->posts .ID = $wpdb->post2cat .post_id AND $wpdb->post2cat .category_id = " . $category . " ) " ;
$query .= empty ( $post_parent ) ? '' : " AND $wpdb->posts .post_parent = ' $post_parent ' " ;
$query .= empty ( $meta_key ) | empty ( $meta_value ) ? '' : " AND ( $wpdb->posts .ID = $wpdb->postmeta .post_id AND $wpdb->postmeta .meta_key = ' $meta_key ' AND $wpdb->postmeta .meta_value = ' $meta_value ' ) " ;
$query .= " GROUP BY $wpdb->posts .ID ORDER BY " . $orderby . ' ' . $order ;
if ( 0 < $numberposts )
$query .= " LIMIT " . $offset . ',' . $numberposts ;
2006-06-08 04:22:16 +02:00
$posts = $wpdb -> get_results ( $query );
update_post_caches ( $posts );
return $posts ;
}
2006-06-08 01:17:59 +02:00
//
// Post meta functions
//
function add_post_meta ( $post_id , $key , $value , $unique = false ) {
2006-11-23 21:39:39 +01:00
global $wpdb , $post_meta_cache , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-10-11 11:18:54 +02:00
$post_id = ( int ) $post_id ;
2006-06-08 01:17:59 +02:00
if ( $unique ) {
2006-10-11 11:18:54 +02:00
if ( $wpdb -> get_var ( " SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = ' $key ' AND post_id = ' $post_id ' " ) ) {
2006-06-08 01:17:59 +02:00
return false ;
}
}
2006-11-23 21:39:39 +01:00
$post_meta_cache [ $blog_id ][ $post_id ][ $key ][] = $value ;
2006-06-08 01:17:59 +02:00
2006-10-13 02:23:25 +02:00
$value = maybe_serialize ( $value );
2006-10-13 01:54:36 +02:00
$value = $wpdb -> escape ( $value );
2006-06-08 01:17:59 +02:00
2006-10-13 01:54:36 +02:00
$wpdb -> query ( " INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (' $post_id ',' $key ',' $value ') " );
2006-06-08 01:17:59 +02:00
return true ;
}
function delete_post_meta ( $post_id , $key , $value = '' ) {
2006-11-23 21:39:39 +01:00
global $wpdb , $post_meta_cache , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-10-11 11:18:54 +02:00
$post_id = ( int ) $post_id ;
2006-06-08 01:17:59 +02:00
if ( empty ( $value ) ) {
2006-10-11 11:18:54 +02:00
$meta_id = $wpdb -> get_var ( " SELECT meta_id FROM $wpdb->postmeta WHERE post_id = ' $post_id ' AND meta_key = ' $key ' " );
2006-06-08 01:17:59 +02:00
} else {
2006-10-11 11:18:54 +02:00
$meta_id = $wpdb -> get_var ( " SELECT meta_id FROM $wpdb->postmeta WHERE post_id = ' $post_id ' AND meta_key = ' $key ' AND meta_value = ' $value ' " );
2006-06-08 01:17:59 +02:00
}
if ( ! $meta_id )
return false ;
if ( empty ( $value ) ) {
2006-10-11 11:18:54 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = ' $post_id ' AND meta_key = ' $key ' " );
2006-11-23 21:39:39 +01:00
unset ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ]);
2006-06-08 01:17:59 +02:00
} else {
2006-10-11 11:18:54 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = ' $post_id ' AND meta_key = ' $key ' AND meta_value = ' $value ' " );
2006-11-23 21:39:39 +01:00
$cache_key = $post_meta_cache [ $blog_id ][ $post_id ][ $key ];
2006-06-08 01:17:59 +02:00
if ( $cache_key ) foreach ( $cache_key as $index => $data )
if ( $data == $value )
2006-11-23 21:39:39 +01:00
unset ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ][ $index ]);
2006-06-08 01:17:59 +02:00
}
2006-11-23 21:39:39 +01:00
unset ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ]);
2006-06-08 01:17:59 +02:00
return true ;
}
function get_post_meta ( $post_id , $key , $single = false ) {
2006-11-23 21:39:39 +01:00
global $wpdb , $post_meta_cache , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-10-11 11:18:54 +02:00
$post_id = ( int ) $post_id ;
2006-11-23 21:39:39 +01:00
if ( isset ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ]) ) {
if ( $single ) {
return maybe_unserialize ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ][ 0 ] );
} else {
return maybe_unserialize ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ] );
}
}
if ( ! isset ( $post_meta_cache [ $blog_id ][ $post_id ]) )
2006-10-24 12:52:59 +02:00
update_postmeta_cache ( $post_id );
2006-06-08 01:17:59 +02:00
if ( $single ) {
2006-11-23 21:39:39 +01:00
if ( isset ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ][ 0 ]) )
return maybe_unserialize ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ][ 0 ]);
2006-10-24 12:52:59 +02:00
else
2006-06-08 01:17:59 +02:00
return '' ;
2006-10-24 12:52:59 +02:00
} else {
2006-11-23 21:39:39 +01:00
return maybe_unserialize ( $post_meta_cache [ $blog_id ][ $post_id ][ $key ]);
2006-06-08 01:17:59 +02:00
}
}
function update_post_meta ( $post_id , $key , $value , $prev_value = '' ) {
2006-11-23 21:39:39 +01:00
global $wpdb , $post_meta_cache , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-10-11 11:18:54 +02:00
$post_id = ( int ) $post_id ;
2006-06-08 01:17:59 +02:00
$original_value = $value ;
2006-10-13 02:23:25 +02:00
$value = maybe_serialize ( $value );
2006-10-13 01:54:36 +02:00
$value = $wpdb -> escape ( $value );
2006-06-08 01:17:59 +02:00
$original_prev = $prev_value ;
2006-10-13 02:23:25 +02:00
$prev_value = maybe_serialize ( $prev_value );
2006-10-13 01:54:36 +02:00
$prev_value = $wpdb -> escape ( $prev_value );
2006-06-08 01:17:59 +02:00
2006-10-11 11:18:54 +02:00
if ( ! $wpdb -> get_var ( " SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = ' $key ' AND post_id = ' $post_id ' " ) ) {
2006-06-08 01:17:59 +02:00
return false ;
}
if ( empty ( $prev_value ) ) {
2006-10-11 11:18:54 +02:00
$wpdb -> query ( " UPDATE $wpdb->postmeta SET meta_value = ' $value ' WHERE meta_key = ' $key ' AND post_id = ' $post_id ' " );
2006-11-23 21:39:39 +01:00
$cache_key = $post_meta_cache [ $blog_id ][ $post_id ][ $key ];
2006-06-08 01:17:59 +02:00
if ( ! empty ( $cache_key ) )
foreach ( $cache_key as $index => $data )
2006-11-23 21:39:39 +01:00
$post_meta_cache [ $blog_id ][ $post_id ][ $key ][ $index ] = $original_value ;
2006-06-08 01:17:59 +02:00
} else {
2006-10-11 11:18:54 +02:00
$wpdb -> query ( " UPDATE $wpdb->postmeta SET meta_value = ' $value ' WHERE meta_key = ' $key ' AND post_id = ' $post_id ' AND meta_value = ' $prev_value ' " );
2006-11-23 21:39:39 +01:00
$cache_key = $post_meta_cache [ $blog_id ][ $post_id ][ $key ];
2006-06-08 01:17:59 +02:00
if ( ! empty ( $cache_key ) )
foreach ( $cache_key as $index => $data )
if ( $data == $original_prev )
2006-11-23 21:39:39 +01:00
$post_meta_cache [ $blog_id ][ $post_id ][ $key ][ $index ] = $original_value ;
2006-06-08 01:17:59 +02:00
}
return true ;
}
2006-10-24 12:52:59 +02:00
function get_post_custom ( $post_id = 0 ) {
2006-11-23 21:39:39 +01:00
global $id , $post_meta_cache , $wpdb , $blog_id ;
2006-06-08 01:17:59 +02:00
2006-10-24 12:52:59 +02:00
if ( ! $post_id )
2006-06-08 01:17:59 +02:00
$post_id = $id ;
2006-10-11 11:18:54 +02:00
$post_id = ( int ) $post_id ;
2006-11-23 21:39:39 +01:00
if ( ! isset ( $post_meta_cache [ $blog_id ][ $post_id ]) )
2006-10-24 12:52:59 +02:00
update_postmeta_cache ( $post_id );
2006-06-08 01:17:59 +02:00
2006-11-23 21:39:39 +01:00
return $post_meta_cache [ $blog_id ][ $post_id ];
2006-06-08 01:17:59 +02:00
}
function get_post_custom_keys ( $post_id = 0 ) {
$custom = get_post_custom ( $post_id );
2006-10-24 12:52:59 +02:00
if ( ! is_array ( $custom ) )
2006-06-08 01:17:59 +02:00
return ;
if ( $keys = array_keys ( $custom ) )
return $keys ;
}
function get_post_custom_values ( $key = '' , $post_id = 0 ) {
$custom = get_post_custom ( $post_id );
return $custom [ $key ];
}
function wp_delete_post ( $postid = 0 ) {
global $wpdb , $wp_rewrite ;
$postid = ( int ) $postid ;
if ( ! $post = $wpdb -> get_row ( " SELECT * FROM $wpdb->posts WHERE ID = $postid " ) )
return $post ;
if ( 'attachment' == $post -> post_type )
return wp_delete_attachment ( $postid );
do_action ( 'delete_post' , $postid );
if ( 'publish' == $post -> post_status && 'post' == $post -> post_type ) {
$categories = wp_get_post_categories ( $post -> ID );
if ( is_array ( $categories ) ) {
foreach ( $categories as $cat_id ) {
$wpdb -> query ( " UPDATE $wpdb->categories SET category_count = category_count - 1 WHERE cat_ID = ' $cat_id ' " );
wp_cache_delete ( $cat_id , 'category' );
2006-11-24 21:44:03 +01:00
do_action ( 'edit_category' , $cat_id );
2006-06-08 01:17:59 +02:00
}
}
}
if ( 'page' == $post -> post_type )
$wpdb -> query ( " UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = $postid AND post_type = 'page' " );
$wpdb -> query ( " DELETE FROM $wpdb->posts WHERE ID = $postid " );
$wpdb -> query ( " DELETE FROM $wpdb->comments WHERE comment_post_ID = $postid " );
$wpdb -> query ( " DELETE FROM $wpdb->post2cat WHERE post_id = $postid " );
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = $postid " );
2006-11-24 21:44:03 +01:00
if ( 'page' == $post -> post_type ) {
wp_cache_delete ( 'all_page_ids' , 'pages' );
wp_cache_delete ( 'get_pages' , 'page' );
2006-06-08 01:17:59 +02:00
$wp_rewrite -> flush_rules ();
}
return $post ;
}
function wp_get_post_categories ( $post_ID = 0 ) {
global $wpdb ;
$post_ID = ( int ) $post_ID ;
2006-11-19 08:56:05 +01:00
$sql = " SELECT category_id
FROM $wpdb -> post2cat
WHERE post_id = '$post_ID'
2006-06-08 01:17:59 +02:00
ORDER BY category_id " ;
$result = $wpdb -> get_col ( $sql );
if ( ! $result )
$result = array ();
return array_unique ( $result );
}
function wp_get_recent_posts ( $num = 10 ) {
global $wpdb ;
// Set the limit clause, if we got a limit
if ( $num ) {
$limit = " LIMIT $num " ;
}
$sql = " SELECT * FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC $limit " ;
$result = $wpdb -> get_results ( $sql , ARRAY_A );
return $result ? $result : array ();
}
function wp_get_single_post ( $postid = 0 , $mode = OBJECT ) {
global $wpdb ;
$post = get_post ( $postid , $mode );
// Set categories
if ( $mode == OBJECT ) {
$post -> post_category = wp_get_post_categories ( $postid );
2006-11-19 08:56:05 +01:00
}
2006-06-08 01:17:59 +02:00
else {
$post [ 'post_category' ] = wp_get_post_categories ( $postid );
}
return $post ;
}
2004-05-24 03:34:57 +02:00
function wp_insert_post ( $postarr = array ()) {
2005-12-28 08:05:05 +01:00
global $wpdb , $wp_rewrite , $allowedtags , $user_ID ;
2005-06-19 03:33:38 +02:00
2005-11-23 02:35:08 +01:00
if ( is_object ( $postarr ) )
$postarr = get_object_vars ( $postarr );
2004-05-24 03:34:57 +02:00
// export array as variables
extract ( $postarr );
2005-06-19 03:33:38 +02:00
// Are we updating or creating?
$update = false ;
if ( ! empty ( $ID ) ) {
$update = true ;
$post = & get_post ( $ID );
$previous_status = $post -> post_status ;
}
2005-06-18 21:08:38 +02:00
// Get the basics.
2006-08-07 05:50:55 +02:00
if ( empty ( $no_filter ) ) {
$post_content = apply_filters ( 'content_save_pre' , $post_content );
2006-11-25 18:54:41 +01:00
$post_content_filtered = apply_filters ( 'content_filtered_save_pre' , $post_content_filtered );
2006-08-07 05:50:55 +02:00
$post_excerpt = apply_filters ( 'excerpt_save_pre' , $post_excerpt );
$post_title = apply_filters ( 'title_save_pre' , $post_title );
$post_category = apply_filters ( 'category_save_pre' , $post_category );
$post_status = apply_filters ( 'status_save_pre' , $post_status );
$post_name = apply_filters ( 'name_save_pre' , $post_name );
$comment_status = apply_filters ( 'comment_status_pre' , $comment_status );
$ping_status = apply_filters ( 'ping_status_pre' , $ping_status );
}
2006-02-12 08:53:23 +01:00
2006-09-02 22:19:07 +02:00
if ( ( '' == $post_content ) && ( '' == $post_title ) && ( '' == $post_excerpt ) )
2006-08-25 02:27:15 +02:00
return 0 ;
2004-05-24 03:34:57 +02:00
// Make sure we set a valid category
if ( 0 == count ( $post_category ) || ! is_array ( $post_category )) {
2005-06-18 21:17:55 +02:00
$post_category = array ( get_option ( 'default_category' ));
2004-05-24 03:34:57 +02:00
}
$post_cat = $post_category [ 0 ];
2005-06-18 21:08:38 +02:00
if ( empty ( $post_author ) )
$post_author = $user_ID ;
if ( empty ( $post_status ) )
$post_status = 'draft' ;
2006-02-09 11:03:48 +01:00
if ( empty ( $post_type ) )
$post_type = 'post' ;
2005-06-19 03:33:38 +02:00
// Get the post ID.
2005-10-13 21:06:31 +02:00
if ( $update )
2005-06-19 03:33:38 +02:00
$post_ID = $ID ;
2005-06-18 21:08:38 +02:00
// Create a valid post name. Drafts are allowed to have an empty
// post name.
if ( empty ( $post_name ) ) {
if ( 'draft' != $post_status )
2005-10-13 21:06:31 +02:00
$post_name = sanitize_title ( $post_title );
2005-06-18 21:08:38 +02:00
} else {
2005-10-13 21:06:31 +02:00
$post_name = sanitize_title ( $post_name );
2005-06-18 21:08:38 +02:00
}
2006-02-12 08:53:23 +01:00
2005-11-14 10:56:41 +01:00
// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now
if ( empty ( $post_date )) {
if ( 'draft' != $post_status )
$post_date = current_time ( 'mysql' );
}
if ( empty ( $post_date_gmt )) {
if ( 'draft' != $post_status )
$post_date_gmt = get_gmt_from_date ( $post_date );
}
2006-08-07 05:50:55 +02:00
2006-02-14 01:12:09 +01:00
if ( 'publish' == $post_status ) {
$now = gmdate ( 'Y-m-d H:i:59' );
if ( mysql2date ( 'U' , $post_date_gmt ) > mysql2date ( 'U' , $now ) )
$post_status = 'future' ;
}
2006-02-12 08:41:56 +01:00
2005-08-05 22:44:18 +02:00
if ( empty ( $comment_status ) ) {
if ( $update )
$comment_status = 'closed' ;
else
2006-08-30 23:46:31 +02:00
$comment_status = get_option ( 'default_comment_status' );
2005-08-05 22:44:18 +02:00
}
if ( empty ( $ping_status ) )
2006-08-30 23:46:31 +02:00
$ping_status = get_option ( 'default_ping_status' );
2005-06-18 21:08:38 +02:00
if ( empty ( $post_pingback ) )
$post_pingback = get_option ( 'default_pingback_flag' );
2005-06-19 03:33:38 +02:00
if ( isset ( $to_ping ) )
$to_ping = preg_replace ( '|\s+|' , " \n " , $to_ping );
2005-06-18 21:08:38 +02:00
else
2005-06-19 03:33:38 +02:00
$to_ping = '' ;
2005-12-11 00:22:47 +01:00
if ( ! isset ( $pinged ) )
$pinged = '' ;
2005-06-18 21:08:38 +02:00
if ( isset ( $post_parent ) )
$post_parent = ( int ) $post_parent ;
else
2005-02-11 04:36:49 +01:00
$post_parent = 0 ;
2005-02-14 05:51:14 +01:00
2005-06-18 21:08:38 +02:00
if ( isset ( $menu_order ) )
$menu_order = ( int ) $menu_order ;
else
$menu_order = 0 ;
if ( ! isset ( $post_password ) )
$post_password = '' ;
2006-02-09 11:03:48 +01:00
if ( 'draft' != $post_status ) {
$post_name_check = $wpdb -> get_var ( " SELECT post_name FROM $wpdb->posts WHERE post_name = ' $post_name ' AND post_type = ' $post_type ' AND ID != ' $post_ID ' AND post_parent = ' $post_parent ' LIMIT 1 " );
2005-12-07 20:02:05 +01:00
2006-09-21 02:01:20 +02:00
if ( $post_name_check || in_array ( $post_name , $wp_rewrite -> feeds ) ) {
2005-02-14 05:51:14 +01:00
$suffix = 2 ;
2006-09-21 02:01:20 +02:00
do {
2005-02-14 05:51:14 +01:00
$alt_post_name = $post_name . " - $suffix " ;
2006-02-09 11:03:48 +01:00
$post_name_check = $wpdb -> get_var ( " SELECT post_name FROM $wpdb->posts WHERE post_name = ' $alt_post_name ' AND post_type = ' $post_type ' AND ID != ' $post_ID ' AND post_parent = ' $post_parent ' LIMIT 1 " );
2005-02-14 05:51:14 +01:00
$suffix ++ ;
2006-09-21 02:01:20 +02:00
} while ( $post_name_check );
2005-02-14 05:51:14 +01:00
$post_name = $alt_post_name ;
}
}
2005-06-19 03:33:38 +02:00
if ( $update ) {
2005-10-13 21:06:31 +02:00
$wpdb -> query (
2005-12-31 23:34:58 +01:00
" UPDATE IGNORE $wpdb->posts SET
2005-06-19 03:33:38 +02:00
post_author = '$post_author' ,
post_date = '$post_date' ,
post_date_gmt = '$post_date_gmt' ,
post_content = '$post_content' ,
2005-12-11 00:22:47 +01:00
post_content_filtered = '$post_content_filtered' ,
2005-06-19 03:33:38 +02:00
post_title = '$post_title' ,
post_excerpt = '$post_excerpt' ,
post_status = '$post_status' ,
2006-02-09 11:03:48 +01:00
post_type = '$post_type' ,
2005-06-19 03:33:38 +02:00
comment_status = '$comment_status' ,
ping_status = '$ping_status' ,
post_password = '$post_password' ,
post_name = '$post_name' ,
to_ping = '$to_ping' ,
2005-12-11 00:22:47 +01:00
pinged = '$pinged' ,
2005-12-24 21:04:59 +01:00
post_modified = '".current_time(' mysql ')."' ,
post_modified_gmt = '".current_time(' mysql ',1)."' ,
2005-06-19 03:33:38 +02:00
post_parent = '$post_parent' ,
menu_order = '$menu_order'
2005-10-13 21:06:31 +02:00
WHERE ID = $post_ID " );
2005-06-19 03:33:38 +02:00
} else {
2005-10-13 21:06:31 +02:00
$wpdb -> query (
2005-12-31 23:34:58 +01:00
" INSERT IGNORE INTO $wpdb->posts
2006-02-09 11:03:48 +01:00
( 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 , post_mime_type )
2005-06-18 21:08:38 +02:00
VALUES
2006-02-09 11:03:48 +01:00
( '$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_date' , '$post_date_gmt' , '$post_parent' , '$menu_order' , '$post_mime_type' ) " );
2006-02-12 08:53:23 +01:00
$post_ID = $wpdb -> insert_id ;
2005-10-13 21:06:31 +02:00
}
if ( empty ( $post_name ) && 'draft' != $post_status ) {
$post_name = sanitize_title ( $post_title , $post_ID );
$wpdb -> query ( " UPDATE $wpdb->posts SET post_name = ' $post_name ' WHERE ID = ' $post_ID ' " );
2005-06-19 03:33:38 +02:00
}
2005-09-14 02:34:04 +02:00
2006-06-06 07:04:41 +02:00
wp_set_post_categories ( $post_ID , $post_category );
2005-09-14 02:34:04 +02:00
2006-02-09 11:03:48 +01:00
if ( 'page' == $post_type ) {
2005-09-14 02:34:04 +02:00
clean_page_cache ( $post_ID );
2005-11-07 22:56:03 +01:00
wp_cache_delete ( $post_ID , 'pages' );
} else {
2005-09-14 02:34:04 +02:00
clean_post_cache ( $post_ID );
2005-11-07 22:56:03 +01:00
}
2004-09-05 04:03:51 +02:00
// Set GUID
2005-06-19 03:33:38 +02:00
if ( ! $update )
$wpdb -> query ( " UPDATE $wpdb->posts SET guid = ' " . get_permalink ( $post_ID ) . " ' WHERE ID = ' $post_ID ' " );
2005-06-18 21:08:38 +02:00
2005-06-19 03:33:38 +02:00
if ( $update ) {
2005-09-14 02:34:04 +02:00
if ( $previous_status != 'publish' && $post_status == 'publish' ) {
// Reset GUID if transitioning to publish.
$wpdb -> query ( " UPDATE $wpdb->posts SET guid = ' " . get_permalink ( $post_ID ) . " ' WHERE ID = ' $post_ID ' " );
2005-06-19 03:33:38 +02:00
do_action ( 'private_to_published' , $post_ID );
2005-09-14 02:34:04 +02:00
}
2006-02-12 08:53:23 +01:00
2005-06-19 03:33:38 +02:00
do_action ( 'edit_post' , $post_ID );
}
2006-02-09 11:03:48 +01:00
if ( $post_status == 'publish' && $post_type == 'post' ) {
2006-08-07 05:50:55 +02:00
do_action ( 'publish_post' , $post_ID );
2006-08-31 07:21:27 +02:00
if ( defined ( 'XMLRPC_REQUEST' ) )
do_action ( 'xmlrpc_publish_post' , $post_ID );
2006-08-07 05:50:55 +02:00
if ( ! defined ( 'WP_IMPORTING' ) ) {
if ( $post_pingback )
$result = $wpdb -> query ( "
2006-11-19 08:56:05 +01:00
INSERT INTO $wpdb -> postmeta
( post_id , meta_key , meta_value )
2006-08-07 05:50:55 +02:00
VALUES ( '$post_ID' , '_pingme' , '1' )
" );
$result = $wpdb -> query ( "
2006-11-19 08:56:05 +01:00
INSERT INTO $wpdb -> postmeta
( post_id , meta_key , meta_value )
2006-08-07 05:50:55 +02:00
VALUES ( '$post_ID' , '_encloseme' , '1' )
" );
wp_schedule_single_event ( time (), 'do_pings' );
}
2006-02-09 11:03:48 +01:00
} else if ( $post_type == 'page' ) {
2006-11-24 21:44:03 +01:00
wp_cache_delete ( 'all_page_ids' , 'pages' );
wp_cache_delete ( 'get_pages' , 'page' );
2005-12-28 08:05:05 +01:00
$wp_rewrite -> flush_rules ();
2005-06-19 03:33:38 +02:00
2005-11-22 01:36:36 +01:00
if ( ! empty ( $page_template ) )
if ( ! update_post_meta ( $post_ID , '_wp_page_template' , $page_template ))
add_post_meta ( $post_ID , '_wp_page_template' , $page_template , true );
2006-11-19 08:56:05 +01:00
2006-05-19 19:22:19 +02:00
if ( $post_status == 'publish' )
do_action ( 'publish_page' , $post_ID );
2004-05-24 03:34:57 +02:00
}
2006-08-07 06:43:38 +02:00
// Always clears the hook in case the post status bounced from future to draft.
wp_clear_scheduled_hook ( 'publish_future_post' , $post_ID );
// Schedule publication.
if ( 'future' == $post_status )
2006-10-08 19:50:21 +02:00
wp_schedule_single_event ( strtotime ( $post_date_gmt . ' GMT' ), 'publish_future_post' , array ( $post_ID ));
2006-03-07 22:43:59 +01:00
2005-12-12 01:30:14 +01:00
do_action ( 'save_post' , $post_ID );
2005-09-16 19:27:09 +02:00
do_action ( 'wp_insert_post' , $post_ID );
2005-09-16 01:34:54 +02:00
return $post_ID ;
2004-05-24 03:34:57 +02:00
}
2006-06-08 01:17:59 +02:00
function wp_update_post ( $postarr = array ()) {
global $wpdb ;
2005-11-23 02:35:08 +01:00
2006-06-08 01:17:59 +02:00
if ( is_object ( $postarr ) )
$postarr = get_object_vars ( $postarr );
2005-12-13 20:19:56 +01:00
2006-06-08 01:17:59 +02:00
// First, get all of the original fields
$post = wp_get_single_post ( $postarr [ 'ID' ], ARRAY_A );
2005-01-07 02:21:12 +01:00
2005-06-19 03:33:38 +02:00
// Escape data pulled from DB.
2005-07-03 20:33:03 +02:00
$post = add_magic_quotes ( $post );
2004-05-24 03:34:57 +02:00
2005-07-03 20:33:03 +02:00
// Passed post category list overwrites existing category list if not empty.
2006-11-19 08:56:05 +01:00
if ( isset ( $postarr [ 'post_category' ]) && is_array ( $postarr [ 'post_category' ])
2005-07-03 20:33:03 +02:00
&& 0 != count ( $postarr [ 'post_category' ]) )
2006-11-19 08:56:05 +01:00
$post_cats = $postarr [ 'post_category' ];
else
$post_cats = $post [ 'post_category' ];
2005-01-07 02:21:12 +01:00
2005-11-14 10:56:41 +01:00
// Drafts shouldn't be assigned a date unless explicitly done so by the user
2006-11-19 08:56:05 +01:00
if ( 'draft' == $post [ 'post_status' ] && empty ( $postarr [ 'edit_date' ]) && empty ( $postarr [ 'post_date' ]) &&
( '0000-00-00 00:00:00' == $post [ 'post_date' ]) )
2005-11-14 10:56:41 +01:00
$clear_date = true ;
else
$clear_date = false ;
2006-11-19 08:56:05 +01:00
// Merge old and new fields with new fields overwriting old ones.
$postarr = array_merge ( $post , $postarr );
$postarr [ 'post_category' ] = $post_cats ;
2005-11-14 10:56:41 +01:00
if ( $clear_date ) {
$postarr [ 'post_date' ] = '' ;
$postarr [ 'post_date_gmt' ] = '' ;
}
2006-02-09 11:03:48 +01:00
if ( $postarr [ 'post_type' ] == 'attachment' )
2005-12-13 20:19:56 +01:00
return wp_insert_attachment ( $postarr );
2005-06-19 03:33:38 +02:00
return wp_insert_post ( $postarr );
2004-05-24 03:34:57 +02:00
}
2006-02-12 08:41:56 +01:00
function wp_publish_post ( $post_id ) {
$post = get_post ( $post_id );
if ( empty ( $post ) )
return ;
2006-08-07 05:50:55 +02:00
if ( 'publish' == $post -> post_status )
2006-02-12 08:41:56 +01:00
return ;
2006-08-07 05:50:55 +02:00
return wp_update_post ( array ( 'post_status' => 'publish' , 'ID' => $post_id , 'no_filter' => true ));
2006-02-12 08:41:56 +01:00
}
2006-06-06 07:04:41 +02:00
function wp_set_post_categories ( $post_ID = 0 , $post_categories = array ()) {
2004-05-24 10:22:18 +02:00
global $wpdb ;
2004-05-24 03:34:57 +02:00
// If $post_categories isn't already an array, make it one:
2006-08-27 21:26:03 +02:00
if ( ! is_array ( $post_categories ) || 0 == count ( $post_categories ) || empty ( $post_categories ))
2005-07-03 20:33:03 +02:00
$post_categories = array ( get_option ( 'default_category' ));
2006-02-12 08:53:23 +01:00
2004-05-24 03:34:57 +02:00
$post_categories = array_unique ( $post_categories );
// First the old categories
$old_categories = $wpdb -> get_col ( "
2006-11-19 08:56:05 +01:00
SELECT category_id
FROM $wpdb -> post2cat
2004-05-24 03:34:57 +02:00
WHERE post_id = $post_ID " );
2006-02-12 08:53:23 +01:00
2004-05-24 03:34:57 +02:00
if ( ! $old_categories ) {
$old_categories = array ();
} else {
$old_categories = array_unique ( $old_categories );
}
// Delete any?
$delete_cats = array_diff ( $old_categories , $post_categories );
if ( $delete_cats ) {
foreach ( $delete_cats as $del ) {
$wpdb -> query ( "
2006-11-19 08:56:05 +01:00
DELETE FROM $wpdb -> post2cat
WHERE category_id = $del
AND post_id = $post_ID
2004-05-24 03:34:57 +02:00
" );
}
}
// Add any?
$add_cats = array_diff ( $post_categories , $old_categories );
if ( $add_cats ) {
foreach ( $add_cats as $new_cat ) {
2006-08-27 21:26:03 +02:00
if ( ! empty ( $new_cat ) )
$wpdb -> query ( "
INSERT INTO $wpdb -> post2cat ( post_id , category_id )
VALUES ( $post_ID , $new_cat ) " );
2004-05-24 03:34:57 +02:00
}
}
2006-02-12 08:53:23 +01:00
2005-11-16 00:47:16 +01:00
// Update category counts.
2005-12-15 21:31:29 +01:00
$all_affected_cats = array_unique ( array_merge ( $post_categories , $old_categories ));
foreach ( $all_affected_cats as $cat_id ) {
2006-02-09 11:03:48 +01:00
$count = $wpdb -> get_var ( " SELECT COUNT(*) FROM $wpdb->post2cat , $wpdb->posts WHERE $wpdb->posts .ID= $wpdb->post2cat .post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = ' $cat_id ' " );
2005-11-16 00:47:16 +01:00
$wpdb -> query ( " UPDATE $wpdb->categories SET category_count = ' $count ' WHERE cat_ID = ' $cat_id ' " );
2006-02-12 08:53:23 +01:00
wp_cache_delete ( $cat_id , 'category' );
2006-11-23 21:39:39 +01:00
do_action ( 'edit_category' , $cat_id );
2005-11-16 00:47:16 +01:00
}
2006-11-23 21:39:39 +01:00
2006-11-24 21:44:03 +01:00
wp_cache_delete ( 'get_categories' , 'category' );
2006-11-23 21:39:39 +01:00
do_action ( 'edit_post' , $post_ID );
2006-06-06 07:04:41 +02:00
} // wp_set_post_categories()
2004-05-24 03:34:57 +02:00
2006-06-08 01:17:59 +02:00
//
// Trackback and ping functions
//
2004-11-27 05:47:54 +01:00
2006-08-30 18:40:17 +02:00
function add_ping ( $post_id , $uri ) { // Add a URL to those already pung
2006-06-08 01:17:59 +02:00
global $wpdb ;
$pung = $wpdb -> get_var ( " SELECT pinged FROM $wpdb->posts WHERE ID = $post_id " );
$pung = trim ( $pung );
$pung = preg_split ( '/\s/' , $pung );
$pung [] = $uri ;
$new = implode ( " \n " , $pung );
$new = apply_filters ( 'add_ping' , $new );
return $wpdb -> query ( " UPDATE $wpdb->posts SET pinged = ' $new ' WHERE ID = $post_id " );
}
2005-12-13 20:19:56 +01:00
2006-06-08 01:17:59 +02:00
function get_enclosed ( $post_id ) { // Get enclosures already enclosed for a post
global $wpdb ;
$custom_fields = get_post_custom ( $post_id );
$pung = array ();
if ( ! is_array ( $custom_fields ) )
return $pung ;
2005-10-14 20:06:23 +02:00
2006-06-08 01:17:59 +02:00
foreach ( $custom_fields as $key => $val ) {
if ( 'enclosure' != $key || ! is_array ( $val ) )
continue ;
foreach ( $val as $enc ) {
$enclosure = split ( " \n " , $enc );
$pung [] = trim ( $enclosure [ 0 ] );
2005-11-15 17:31:24 +01:00
}
}
2006-06-08 01:17:59 +02:00
$pung = apply_filters ( 'get_enclosed' , $pung );
return $pung ;
2004-05-24 03:34:57 +02:00
}
2006-08-30 18:40:17 +02:00
function get_pung ( $post_id ) { // Get URLs already pung for a post
2006-06-08 01:17:59 +02:00
global $wpdb ;
$pung = $wpdb -> get_var ( " SELECT pinged FROM $wpdb->posts WHERE ID = $post_id " );
$pung = trim ( $pung );
$pung = preg_split ( '/\s/' , $pung );
$pung = apply_filters ( 'get_pung' , $pung );
return $pung ;
2004-05-24 03:34:57 +02:00
}
2006-08-30 18:40:17 +02:00
function get_to_ping ( $post_id ) { // Get any URLs in the todo list
2006-06-08 01:17:59 +02:00
global $wpdb ;
$to_ping = $wpdb -> get_var ( " SELECT to_ping FROM $wpdb->posts WHERE ID = $post_id " );
$to_ping = trim ( $to_ping );
$to_ping = preg_split ( '/\s/' , $to_ping , - 1 , PREG_SPLIT_NO_EMPTY );
$to_ping = apply_filters ( 'get_to_ping' , $to_ping );
return $to_ping ;
2004-05-24 03:34:57 +02:00
}
// do trackbacks for a list of urls
// accepts a comma-separated list of trackback urls and a post id
function trackback_url_list ( $tb_list , $post_id ) {
if ( ! empty ( $tb_list )) {
// get post data
$postdata = wp_get_single_post ( $post_id , ARRAY_A );
// import postdata as variables
extract ( $postdata );
2006-02-12 08:53:23 +01:00
2004-05-24 03:34:57 +02:00
// form an excerpt
$excerpt = strip_tags ( $post_excerpt ? $post_excerpt : $post_content );
2006-02-12 08:53:23 +01:00
2004-05-24 03:34:57 +02:00
if ( strlen ( $excerpt ) > 255 ) {
2004-08-25 16:22:39 +02:00
$excerpt = substr ( $excerpt , 0 , 252 ) . '...' ;
2004-05-24 03:34:57 +02:00
}
2006-02-12 08:53:23 +01:00
2004-05-24 03:34:57 +02:00
$trackback_urls = explode ( ',' , $tb_list );
foreach ( $trackback_urls as $tb_url ) {
2006-11-19 08:56:05 +01:00
$tb_url = trim ( $tb_url );
trackback ( $tb_url , stripslashes ( $post_title ), $excerpt , $post_id );
}
2004-05-24 03:34:57 +02:00
}
}
2006-06-08 01:17:59 +02:00
//
// Page functions
//
2005-01-10 21:21:06 +01:00
2006-06-08 01:17:59 +02:00
function get_all_page_ids () {
2004-10-14 09:26:41 +02:00
global $wpdb ;
2006-06-08 01:17:59 +02:00
if ( ! $page_ids = wp_cache_get ( 'all_page_ids' , 'pages' ) ) {
$page_ids = $wpdb -> get_col ( " SELECT ID FROM $wpdb->posts WHERE post_type = 'page' " );
wp_cache_add ( 'all_page_ids' , $page_ids , 'pages' );
}
return $page_ids ;
2004-10-14 09:26:41 +02:00
}
2006-06-08 01:17:59 +02:00
// Retrieves page data given a page ID or page object.
// Handles page caching.
function & get_page ( & $page , $output = OBJECT ) {
2006-11-23 21:39:39 +01:00
global $wpdb , $blog_id ;
2005-08-03 02:40:42 +02:00
2006-06-08 01:17:59 +02:00
if ( empty ( $page ) ) {
if ( isset ( $GLOBALS [ 'page' ]) ) {
$_page = & $GLOBALS [ 'page' ];
wp_cache_add ( $_page -> ID , $_page , 'pages' );
} else {
$_page = null ;
}
} elseif ( is_object ( $page ) ) {
if ( 'post' == $page -> post_type )
return get_post ( $page , $output );
wp_cache_add ( $page -> ID , $page , 'pages' );
$_page = $page ;
} else {
2006-09-20 01:56:28 +02:00
if ( isset ( $GLOBALS [ 'page' ] -> ID ) && ( $page == $GLOBALS [ 'page' ] -> ID ) ) {
2006-06-08 01:17:59 +02:00
$_page = & $GLOBALS [ 'page' ];
wp_cache_add ( $_page -> ID , $_page , 'pages' );
2006-11-23 21:39:39 +01:00
} elseif ( ! isset ( $_page ) && $_page == $GLOBALS [ 'post_cache' ][ $blog_id ][ $page ] ) {
2006-06-08 01:17:59 +02:00
return get_post ( $page , $output );
2006-09-20 01:56:28 +02:00
} elseif ( isset ( $_page ) && $_page == wp_cache_get ( $page , 'pages' ) ) {
2006-06-08 01:17:59 +02:00
// Got it.
} else {
$query = " SELECT * FROM $wpdb->posts WHERE ID= ' $page ' LIMIT 1 " ;
$_page = & $wpdb -> get_row ( $query );
if ( 'post' == $_page -> post_type )
return get_post ( $_page , $output );
wp_cache_add ( $_page -> ID , $_page , 'pages' );
2005-02-12 09:58:10 +01:00
}
}
2006-06-08 01:17:59 +02:00
if ( $output == OBJECT ) {
return $_page ;
} elseif ( $output == ARRAY_A ) {
return get_object_vars ( $_page );
} elseif ( $output == ARRAY_N ) {
return array_values ( get_object_vars ( $_page ));
} else {
return $_page ;
}
2005-02-12 09:58:10 +01:00
}
2006-06-08 01:17:59 +02:00
function get_page_by_path ( $page_path , $output = OBJECT ) {
2004-10-14 09:26:41 +02:00
global $wpdb ;
2006-06-08 01:17:59 +02:00
$page_path = rawurlencode ( urldecode ( $page_path ));
$page_path = str_replace ( '%2F' , '/' , $page_path );
$page_path = str_replace ( '%20' , ' ' , $page_path );
$page_paths = '/' . trim ( $page_path , '/' );
$leaf_path = sanitize_title ( basename ( $page_paths ));
$page_paths = explode ( '/' , $page_paths );
foreach ( $page_paths as $pathdir )
$full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title ( $pathdir );
$pages = $wpdb -> get_results ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = ' $leaf_path ' AND post_type='page' " );
2006-11-19 08:56:05 +01:00
if ( empty ( $pages ) )
2006-06-08 01:17:59 +02:00
return NULL ;
foreach ( $pages as $page ) {
$path = '/' . $leaf_path ;
$curpage = $page ;
while ( $curpage -> post_parent != 0 ) {
$curpage = $wpdb -> get_row ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = ' $curpage->post_parent ' and post_type='page' " );
$path = '/' . $curpage -> post_name . $path ;
}
if ( $path == $full_path )
return get_page ( $page -> ID , $output );
}
return NULL ;
2004-10-14 09:26:41 +02:00
}
2006-10-26 21:55:10 +02:00
function get_page_by_title ( $page_title , $output = OBJECT ) {
global $wpdb ;
$page_title = $wpdb -> escape ( $page_title );
$page = $wpdb -> get_var ( " SELECT ID FROM $wpdb->posts WHERE post_title = ' $page_title ' AND post_type='page' " );
if ( $page )
return get_page ( $page , $output );
return NULL ;
}
2006-06-08 01:17:59 +02:00
function & get_page_children ( $page_id , $pages ) {
2006-11-23 21:39:39 +01:00
global $page_cache , $blog_id ;
2006-06-08 01:17:59 +02:00
if ( empty ( $pages ) )
2006-11-23 21:39:39 +01:00
$pages = & $page_cache [ $blog_id ];
2006-06-08 01:17:59 +02:00
$page_list = array ();
foreach ( $pages as $page ) {
if ( $page -> post_parent == $page_id ) {
$page_list [] = $page ;
if ( $children = get_page_children ( $page -> ID , $pages ) )
$page_list = array_merge ( $page_list , $children );
}
}
return $page_list ;
2004-10-14 09:26:41 +02:00
}
2005-12-24 17:26:55 +01:00
//fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents
//immediately follow their parents
function get_page_hierarchy ( $posts , $parent = 0 ) {
$result = array ( );
if ( $posts ) { foreach ( $posts as $post ) {
if ( $post -> post_parent == $parent ) {
$result [ $post -> ID ] = $post -> post_name ;
$children = get_page_hierarchy ( $posts , $post -> ID );
$result += $children ; //append $children to $result
}
} }
return $result ;
}
2006-06-08 04:22:16 +02:00
function get_page_uri ( $page_id ) {
$page = get_page ( $page_id );
$uri = urldecode ( $page -> post_name );
// A page cannot be it's own parent.
if ( $page -> post_parent == $page -> ID )
return $uri ;
while ( $page -> post_parent != 0 ) {
$page = get_page ( $page -> post_parent );
$uri = urldecode ( $page -> post_name ) . " / " . $uri ;
}
return $uri ;
}
2006-06-08 01:17:59 +02:00
function & get_pages ( $args = '' ) {
global $wpdb ;
if ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
$defaults = array ( 'child_of' => 0 , 'sort_order' => 'ASC' , 'sort_column' => 'post_title' ,
2006-09-10 19:47:49 +02:00
'hierarchical' => 1 , 'exclude' => '' , 'include' => '' , 'meta_key' => '' , 'meta_value' => '' , 'authors' => '' );
2006-06-08 01:17:59 +02:00
$r = array_merge ( $defaults , $r );
extract ( $r );
2006-11-23 18:21:08 +01:00
$key = md5 ( serialize ( $r ) );
if ( $cache = wp_cache_get ( 'get_pages' , 'page' ) )
if ( isset ( $cache [ $key ] ) )
return apply_filters ( 'get_pages' , $cache [ $key ], $r );
2006-06-08 01:17:59 +02:00
$inclusions = '' ;
if ( ! empty ( $include ) ) {
2006-11-23 18:21:08 +01:00
$child_of = 0 ; //ignore child_of, exclude, meta_key, and meta_value params if using include
2006-11-24 23:55:28 +01:00
$exclude = '' ;
2006-06-08 01:17:59 +02:00
$meta_key = '' ;
$meta_value = '' ;
$incpages = preg_split ( '/[\s,]+/' , $include );
if ( count ( $incpages ) ) {
foreach ( $incpages as $incpage ) {
if ( empty ( $inclusions ))
$inclusions = ' AND ( ID = ' . intval ( $incpage ) . ' ' ;
else
$inclusions .= ' OR ID = ' . intval ( $incpage ) . ' ' ;
}
}
}
2006-11-24 23:55:28 +01:00
if ( ! empty ( $inclusions ))
$inclusions .= ')' ;
2006-06-08 01:17:59 +02:00
$exclusions = '' ;
if ( ! empty ( $exclude ) ) {
$expages = preg_split ( '/[\s,]+/' , $exclude );
if ( count ( $expages ) ) {
foreach ( $expages as $expage ) {
if ( empty ( $exclusions ))
$exclusions = ' AND ( ID <> ' . intval ( $expage ) . ' ' ;
else
$exclusions .= ' AND ID <> ' . intval ( $expage ) . ' ' ;
}
}
}
if ( ! empty ( $exclusions ))
$exclusions .= ')' ;
2006-09-10 19:47:49 +02:00
$author_query = '' ;
if ( ! empty ( $authors )) {
$post_authors = preg_split ( '/[\s,]+/' , $authors );
if ( count ( $post_authors ) ) {
foreach ( $post_authors as $post_author ) {
//Do we have an author id or an author login?
if ( 0 == intval ( $post_author ) ) {
$post_author = get_userdatabylogin ( $post_author );
if ( empty ( $post_author ) )
continue ;
if ( empty ( $post_author -> ID ) )
continue ;
$post_author = $post_author -> ID ;
}
if ( '' == $author_query )
$author_query = ' post_author = ' . intval ( $post_author ) . ' ' ;
else
$author_query .= ' OR post_author = ' . intval ( $post_author ) . ' ' ;
}
if ( '' != $author_query )
$author_query = " AND ( $author_query ) " ;
}
}
2006-06-08 01:17:59 +02:00
$query = " SELECT * FROM $wpdb->posts " ;
$query .= ( empty ( $meta_key ) ? " " : " , $wpdb->postmeta " ) ;
$query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ;
$query .= ( empty ( $meta_key ) | empty ( $meta_value ) ? " " : " AND ( $wpdb->posts .ID = $wpdb->postmeta .post_id AND $wpdb->postmeta .meta_key = ' $meta_key ' AND $wpdb->postmeta .meta_value = ' $meta_value ' ) " ) ;
2006-09-10 19:47:49 +02:00
$query .= $author_query ;
2006-06-08 01:17:59 +02:00
$query .= " ORDER BY " . $sort_column . " " . $sort_order ;
$pages = $wpdb -> get_results ( $query );
$pages = apply_filters ( 'get_pages' , $pages , $r );
if ( empty ( $pages ) )
return array ();
// Update cache.
update_page_cache ( $pages );
if ( $child_of || $hierarchical )
$pages = & get_page_children ( $child_of , $pages );
2006-11-23 18:21:08 +01:00
$cache [ $key ] = $pages ;
wp_cache_set ( 'get_pages' , $cache , 'page' );
2006-06-08 01:17:59 +02:00
return $pages ;
}
2006-02-10 01:54:16 +01:00
function generate_page_uri_index () {
2005-06-19 04:51:48 +02:00
global $wpdb ;
2006-02-12 08:53:23 +01:00
2005-12-24 17:26:55 +01:00
//get pages in order of hierarchy, i.e. children after parents
2006-02-09 11:03:48 +01:00
$posts = get_page_hierarchy ( $wpdb -> get_results ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page' " ));
2005-12-24 17:26:55 +01:00
//now reverse it, because we need parents after children for rewrite rules to work properly
$posts = array_reverse ( $posts , true );
2005-06-19 04:51:48 +02:00
2006-02-10 01:54:16 +01:00
$page_uris = array ();
$page_attachment_uris = array ();
2005-12-28 05:27:21 +01:00
2005-06-19 04:51:48 +02:00
if ( $posts ) {
2006-02-12 08:53:23 +01:00
2005-12-24 17:26:55 +01:00
foreach ( $posts as $id => $post ) {
2005-12-28 05:27:21 +01:00
2006-08-30 18:40:17 +02:00
// URL => page name
2005-12-24 17:26:55 +01:00
$uri = get_page_uri ( $id );
2006-02-09 11:03:48 +01:00
$attachments = $wpdb -> get_results ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = ' $id ' " );
2005-12-28 05:27:21 +01:00
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
$attach_uri = get_page_uri ( $attachment -> ID );
2006-02-10 01:54:16 +01:00
$page_attachment_uris [ $attach_uri ] = $attachment -> ID ;
2005-12-28 05:27:21 +01:00
}
}
2006-02-10 01:54:16 +01:00
$page_uris [ $uri ] = $id ;
2005-06-19 04:51:48 +02:00
}
2005-12-28 05:27:21 +01:00
2006-02-10 01:54:16 +01:00
update_option ( 'page_uris' , $page_uris );
2006-02-12 08:53:23 +01:00
2006-02-10 01:54:16 +01:00
if ( $page_attachment_uris )
update_option ( 'page_attachment_uris' , $page_attachment_uris );
2005-06-19 04:51:48 +02:00
}
}
2006-06-08 01:17:59 +02:00
//
// Attachment functions
//
2005-10-18 01:45:50 +02:00
2006-06-22 21:44:36 +02:00
function is_local_attachment ( $url ) {
if ( ! strstr ( $url , get_bloginfo ( 'home' ) ) )
return false ;
if ( strstr ( $url , get_bloginfo ( 'home' ) . '/?attachment_id=' ) )
return true ;
if ( $id = url_to_postid ( $url ) ) {
$post = & get_post ( $id );
if ( 'attachment' == $post -> post_type )
return true ;
}
return false ;
}
2006-06-08 01:17:59 +02:00
function wp_insert_attachment ( $object , $file = false , $post_parent = 0 ) {
global $wpdb , $user_ID ;
2005-10-18 01:45:50 +02:00
2006-06-08 01:17:59 +02:00
if ( is_object ( $object ) )
$object = get_object_vars ( $object );
2005-11-19 21:08:21 +01:00
2006-06-08 01:17:59 +02:00
// Export array as variables
extract ( $object );
2006-02-09 11:03:48 +01:00
2006-06-08 01:17:59 +02:00
// Get the basics.
$post_content = apply_filters ( 'content_save_pre' , $post_content );
2006-11-25 18:54:41 +01:00
$post_content_filtered = apply_filters ( 'content_filtered_save_pre' , $post_content_filtered );
2006-06-08 01:17:59 +02:00
$post_excerpt = apply_filters ( 'excerpt_save_pre' , $post_excerpt );
$post_title = apply_filters ( 'title_save_pre' , $post_title );
$post_category = apply_filters ( 'category_save_pre' , $post_category );
$post_name = apply_filters ( 'name_save_pre' , $post_name );
$comment_status = apply_filters ( 'comment_status_pre' , $comment_status );
$ping_status = apply_filters ( 'ping_status_pre' , $ping_status );
$post_mime_type = apply_filters ( 'post_mime_type_pre' , $post_mime_type );
2006-02-09 11:03:48 +01:00
2006-06-08 01:17:59 +02:00
// Make sure we set a valid category
if ( 0 == count ( $post_category ) || ! is_array ( $post_category )) {
$post_category = array ( get_option ( 'default_category' ));
}
$post_cat = $post_category [ 0 ];
2006-02-09 11:03:48 +01:00
2006-06-08 01:17:59 +02:00
if ( empty ( $post_author ) )
$post_author = $user_ID ;
2006-02-09 11:03:48 +01:00
2006-06-08 01:17:59 +02:00
$post_type = 'attachment' ;
$post_status = 'inherit' ;
2005-11-19 21:08:21 +01:00
2006-06-08 01:17:59 +02:00
// Are we updating or creating?
$update = false ;
if ( ! empty ( $ID ) ) {
$update = true ;
$post_ID = $ID ;
}
2005-11-19 21:08:21 +01:00
2006-06-08 01:17:59 +02:00
// Create a valid post name.
if ( empty ( $post_name ) )
$post_name = sanitize_title ( $post_title );
else
$post_name = sanitize_title ( $post_name );
2005-11-19 21:08:21 +01:00
2006-06-08 01:17:59 +02:00
if ( empty ( $post_date ))
$post_date = current_time ( 'mysql' );
2006-11-19 08:56:05 +01:00
if ( empty ( $post_date_gmt ))
2006-06-08 01:17:59 +02:00
$post_date_gmt = current_time ( 'mysql' , 1 );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
if ( empty ( $comment_status ) ) {
if ( $update )
$comment_status = 'closed' ;
2006-01-02 05:33:27 +01:00
else
2006-08-30 23:46:31 +02:00
$comment_status = get_option ( 'default_comment_status' );
2006-01-02 05:33:27 +01:00
}
2006-06-08 01:17:59 +02:00
if ( empty ( $ping_status ) )
2006-08-30 23:46:31 +02:00
$ping_status = get_option ( 'default_ping_status' );
2006-06-08 01:17:59 +02:00
if ( empty ( $post_pingback ) )
$post_pingback = get_option ( 'default_pingback_flag' );
2006-01-02 05:33:27 +01:00
2006-06-08 01:17:59 +02:00
if ( isset ( $to_ping ) )
$to_ping = preg_replace ( '|\s+|' , " \n " , $to_ping );
else
$to_ping = '' ;
2006-01-02 05:33:27 +01:00
2006-06-08 01:17:59 +02:00
if ( isset ( $post_parent ) )
$post_parent = ( int ) $post_parent ;
else
$post_parent = 0 ;
2006-01-02 05:33:27 +01:00
2006-06-08 01:17:59 +02:00
if ( isset ( $menu_order ) )
$menu_order = ( int ) $menu_order ;
else
$menu_order = 0 ;
2006-01-02 05:33:27 +01:00
2006-06-08 01:17:59 +02:00
if ( ! isset ( $post_password ) )
$post_password = '' ;
2005-12-05 04:17:03 +01:00
2006-06-08 01:17:59 +02:00
if ( isset ( $to_ping ) )
$to_ping = preg_replace ( '|\s+|' , " \n " , $to_ping );
else
$to_ping = '' ;
2005-12-05 04:17:03 +01:00
2006-06-08 01:17:59 +02:00
if ( ! isset ( $pinged ) )
$pinged = '' ;
2005-12-05 04:17:03 +01:00
2006-06-08 01:17:59 +02:00
if ( $update ) {
$wpdb -> query (
" UPDATE $wpdb->posts SET
post_author = '$post_author' ,
post_date = '$post_date' ,
post_date_gmt = '$post_date_gmt' ,
post_content = '$post_content' ,
post_content_filtered = '$post_content_filtered' ,
post_title = '$post_title' ,
post_excerpt = '$post_excerpt' ,
post_status = '$post_status' ,
post_type = '$post_type' ,
comment_status = '$comment_status' ,
ping_status = '$ping_status' ,
post_password = '$post_password' ,
post_name = '$post_name' ,
to_ping = '$to_ping' ,
pinged = '$pinged' ,
post_modified = '".current_time(' mysql ')."' ,
post_modified_gmt = '".current_time(' mysql ',1)."' ,
post_parent = '$post_parent' ,
menu_order = '$menu_order' ,
post_mime_type = '$post_mime_type' ,
guid = '$guid'
WHERE ID = $post_ID " );
} else {
$wpdb -> query (
" INSERT INTO $wpdb->posts
( 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 , post_mime_type , guid )
VALUES
( '$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_date' , '$post_date_gmt' , '$post_parent' , '$menu_order' , '$post_mime_type' , '$guid' ) " );
$post_ID = $wpdb -> insert_id ;
2005-12-05 04:17:03 +01:00
}
2006-06-08 01:17:59 +02:00
if ( empty ( $post_name ) ) {
$post_name = sanitize_title ( $post_title , $post_ID );
$wpdb -> query ( " UPDATE $wpdb->posts SET post_name = ' $post_name ' WHERE ID = ' $post_ID ' " );
2005-12-05 04:17:03 +01:00
}
2006-06-08 01:17:59 +02:00
wp_set_post_categories ( $post_ID , $post_category );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
if ( $file )
2006-10-19 02:39:01 +02:00
add_post_meta ( $post_ID , '_wp_attached_file' , $file );
2006-02-12 08:53:23 +01:00
2006-06-08 01:17:59 +02:00
clean_post_cache ( $post_ID );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
if ( $update ) {
do_action ( 'edit_attachment' , $post_ID );
} else {
do_action ( 'add_attachment' , $post_ID );
2005-12-29 02:46:32 +01:00
}
2006-02-12 08:53:23 +01:00
2006-06-08 01:17:59 +02:00
return $post_ID ;
}
function wp_delete_attachment ( $postid ) {
global $wpdb ;
$postid = ( int ) $postid ;
if ( ! $post = $wpdb -> get_row ( " SELECT * FROM $wpdb->posts WHERE ID = ' $postid ' " ) )
return $post ;
2006-01-02 05:59:39 +01:00
2006-06-08 01:17:59 +02:00
if ( 'attachment' != $post -> post_type )
return false ;
2006-02-12 08:53:23 +01:00
2006-06-08 01:17:59 +02:00
$meta = get_post_meta ( $postid , '_wp_attachment_metadata' , true );
$file = get_post_meta ( $postid , '_wp_attached_file' , true );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->posts WHERE ID = ' $postid ' " );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->comments WHERE comment_post_ID = ' $postid ' " );
2005-12-01 23:51:40 +01:00
2006-06-08 01:17:59 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->post2cat WHERE post_id = ' $postid ' " );
2006-03-30 09:36:54 +02:00
2006-06-08 01:17:59 +02:00
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = ' $postid ' " );
2006-03-30 09:36:54 +02:00
2006-06-08 01:17:59 +02:00
if ( ! empty ( $meta [ 'thumb' ]) ) {
// Don't delete the thumb if another attachment uses it
if ( ! $wpdb -> get_row ( " SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '% " . $wpdb -> escape ( $meta [ 'thumb' ]) . " %' AND post_id <> $postid " )) {
$thumbfile = str_replace ( basename ( $file ), $meta [ 'thumb' ], $file );
$thumbfile = apply_filters ( 'wp_delete_file' , $thumbfile );
@ unlink ( $thumbfile );
2006-03-30 09:36:54 +02:00
}
}
2006-06-08 01:17:59 +02:00
$file = apply_filters ( 'wp_delete_file' , $file );
2006-03-30 09:50:33 +02:00
2006-06-08 01:17:59 +02:00
if ( ! empty ( $file ) )
@ unlink ( $file );
do_action ( 'delete_attachment' , $postid );
return $post ;
2006-03-30 09:50:33 +02:00
}
2005-04-28 01:55:06 +02:00
?>