2007-05-25 09:16:21 +02:00
< ? php
2008-10-02 03:03:26 +02:00
/**
* Template WordPress Administration API .
*
* A Big Mess . Also some neat functions that are nicely written .
*
* @ package WordPress
* @ subpackage Administration
*/
2007-05-25 09:16:21 +02:00
//
2008-04-18 19:41:10 +02:00
// Category Checklists
2007-05-25 09:16:21 +02:00
//
2008-10-02 03:03:26 +02:00
/**
2012-04-04 19:32:03 +02:00
* Walker to output an unordered list of category checkbox < input > elements .
2008-10-02 03:03:26 +02:00
*
2012-04-04 19:32:03 +02:00
* @ see Walker
* @ see wp_category_checklist ()
* @ see wp_terms_checklist ()
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 1
2008-10-02 03:03:26 +02:00
*/
2010-08-11 23:54:51 +02:00
class Walker_Category_Checklist extends Walker {
var $tree_type = 'category' ;
var $db_fields = array ( 'parent' => 'parent' , 'id' => 'term_id' ); //TODO: decouple this
2008-06-15 02:45:01 +02:00
2013-09-28 20:08:10 +02:00
/**
* Starts the list before the elements are added .
*
* @ see Walker : start_lvl ()
*
* @ since 2.5 . 1
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param int $depth Depth of category . Used for tab indentation .
* @ param array $args An array of arguments . @ see wp_terms_checklist ()
*/
2014-05-19 07:04:16 +02:00
public function start_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-08-11 23:54:51 +02:00
$indent = str_repeat ( " \t " , $depth );
$output .= " $indent <ul class='children'> \n " ;
2008-06-15 02:45:01 +02:00
}
2013-09-28 20:08:10 +02:00
/**
* Ends the list of after the elements are added .
*
* @ see Walker :: end_lvl ()
*
* @ since 2.5 . 1
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param int $depth Depth of category . Used for tab indentation .
* @ param array $args An array of arguments . @ see wp_terms_checklist ()
*/
2014-05-19 07:04:16 +02:00
public function end_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-08-11 23:54:51 +02:00
$indent = str_repeat ( " \t " , $depth );
$output .= " $indent </ul> \n " ;
}
2008-02-05 07:47:27 +01:00
2013-09-28 20:08:10 +02:00
/**
* Start the element output .
*
* @ see Walker :: start_el ()
*
* @ since 2.5 . 1
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param object $category The current term object .
* @ param int $depth Depth of the term in reference to parents . Default 0.
* @ param array $args An array of arguments . @ see wp_terms_checklist ()
* @ param int $id ID of the current term .
*/
2014-05-19 07:04:16 +02:00
public function start_el ( & $output , $category , $depth = 0 , $args = array (), $id = 0 ) {
2014-05-15 05:14:14 +02:00
if ( empty ( $args [ 'taxonomy' ] ) ) {
2010-08-11 23:54:51 +02:00
$taxonomy = 'category' ;
2014-05-15 05:14:14 +02:00
} else {
$taxonomy = $args [ 'taxonomy' ];
}
2008-06-15 02:45:01 +02:00
2014-05-15 05:14:14 +02:00
if ( $taxonomy == 'category' ) {
2010-08-11 23:54:51 +02:00
$name = 'post_category' ;
2014-05-15 05:14:14 +02:00
} else {
$name = 'tax_input[' . $taxonomy . ']' ;
}
$args [ 'popular_cats' ] = empty ( $args [ 'popular_cats' ] ) ? array () : $args [ 'popular_cats' ];
$class = in_array ( $category -> term_id , $args [ 'popular_cats' ] ) ? ' class="popular-category"' : '' ;
2008-02-05 07:47:27 +01:00
2014-05-15 05:14:14 +02:00
$args [ 'selected_cats' ] = empty ( $args [ 'selected_cats' ] ) ? array () : $args [ 'selected_cats' ];
2014-02-23 23:44:13 +01:00
/** This filter is documented in wp-includes/category-template.php */
2014-05-15 05:14:14 +02:00
$output .= " \n <li id=' { $taxonomy } - { $category -> term_id } ' $class > " .
'<label class="selectit"><input value="' . $category -> term_id . '" type="checkbox" name="' . $name . '[]" id="in-' . $taxonomy . '-' . $category -> term_id . '"' .
checked ( in_array ( $category -> term_id , $args [ 'selected_cats' ] ), true , false ) .
disabled ( empty ( $args [ 'disabled' ] ), false , false ) . ' /> ' .
esc_html ( apply_filters ( 'the_category' , $category -> name ) ) . '</label>' ;
2007-12-14 07:20:42 +01:00
}
2008-08-09 07:36:14 +02:00
2013-09-28 20:08:10 +02:00
/**
* Ends the element output , if needed .
*
* @ see Walker :: end_el ()
*
* @ since 2.5 . 1
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param object $category The current term object .
* @ param int $depth Depth of the term in reference to parents . Default 0.
* @ param array $args An array of arguments . @ see wp_terms_checklist ()
*/
2014-05-19 07:04:16 +02:00
public function end_el ( & $output , $category , $depth = 0 , $args = array () ) {
2010-08-11 23:54:51 +02:00
$output .= " </li> \n " ;
2008-07-12 17:40:57 +02:00
}
2008-06-15 02:45:01 +02:00
}
2010-05-24 23:28:07 +02:00
/**
2012-04-04 19:32:03 +02:00
* Output an unordered list of checkbox < input > elements labelled
* with category names .
2008-10-02 03:03:26 +02:00
*
2012-04-04 19:32:03 +02:00
* @ see wp_terms_checklist ()
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 1
2008-10-02 03:03:26 +02:00
*
2012-04-04 19:32:03 +02:00
* @ param int $post_id Mark categories associated with this post as checked . $selected_cats must not be an array .
* @ param int $descendants_and_self ID of the category to output along with its descendents .
* @ param bool | array $selected_cats List of categories to mark as checked .
* @ param bool | array $popular_cats Override the list of categories that receive the " popular-category " class .
* @ param object $walker Walker object to use to build the output .
* @ param bool $checked_ontop Move checked items out of the hierarchy and to the top of the list .
2008-10-02 03:03:26 +02:00
*/
2010-08-11 23:54:51 +02:00
function wp_category_checklist ( $post_id = 0 , $descendants_and_self = 0 , $selected_cats = false , $popular_cats = false , $walker = null , $checked_ontop = true ) {
2012-04-04 19:32:03 +02:00
wp_terms_checklist ( $post_id , array (
'taxonomy' => 'category' ,
'descendants_and_self' => $descendants_and_self ,
'selected_cats' => $selected_cats ,
'popular_cats' => $popular_cats ,
'walker' => $walker ,
'checked_ontop' => $checked_ontop
) );
2010-08-11 23:54:51 +02:00
}
2008-08-09 07:36:14 +02:00
2010-08-11 23:54:51 +02:00
/**
2012-04-04 19:32:03 +02:00
* Output an unordered list of checkbox < input > elements labelled
* with term names . Taxonomy independent version of wp_category_checklist () .
2010-08-11 23:54:51 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 3.0 . 0
*
2010-08-11 23:54:51 +02:00
* @ param int $post_id
* @ param array $args
*/
2014-05-15 05:09:15 +02:00
function wp_terms_checklist ( $post_id = 0 , $args = array () ) {
2010-08-11 23:54:51 +02:00
$defaults = array (
'descendants_and_self' => 0 ,
'selected_cats' => false ,
'popular_cats' => false ,
'walker' => null ,
'taxonomy' => 'category' ,
'checked_ontop' => true
);
2014-02-23 23:44:13 +01:00
/**
* Filter the taxonomy terms checklist arguments .
*
* @ since 3.4 . 0
*
* @ see wp_terms_checklist ()
*
* @ param array $args An array of arguments .
* @ param int $post_id The post ID .
*/
2014-05-15 05:09:15 +02:00
$params = apply_filters ( 'wp_terms_checklist_args' , $args , $post_id );
2012-05-03 03:15:18 +02:00
2014-05-15 05:09:15 +02:00
$r = wp_parse_args ( $params , $defaults );
2008-08-09 07:36:14 +02:00
2014-05-15 05:09:15 +02:00
if ( empty ( $r [ 'walker' ] ) || ! is_a ( $r [ 'walker' ], 'Walker' ) ) {
2010-08-11 23:54:51 +02:00
$walker = new Walker_Category_Checklist ;
2014-05-15 05:09:15 +02:00
} else {
$walker = $r [ 'walker' ];
}
2008-08-09 07:36:14 +02:00
2014-05-15 05:09:15 +02:00
$taxonomy = $r [ 'taxonomy' ];
$descendants_and_self = ( int ) $r [ 'descendants_and_self' ];
2008-08-09 07:36:14 +02:00
2014-05-15 05:09:15 +02:00
$args = array ( 'taxonomy' => $taxonomy );
2008-08-09 07:36:14 +02:00
2014-05-15 05:09:15 +02:00
$tax = get_taxonomy ( $taxonomy );
$args [ 'disabled' ] = ! current_user_can ( $tax -> cap -> assign_terms );
2008-06-15 02:45:01 +02:00
2014-05-15 05:09:15 +02:00
if ( is_array ( $r [ 'selected_cats' ] ) ) {
$args [ 'selected_cats' ] = $r [ 'selected_cats' ];
} elseif ( $post_id ) {
$args [ 'selected_cats' ] = wp_get_object_terms ( $post_id , $taxonomy , array_merge ( $args , array ( 'fields' => 'ids' ) ) );
} else {
2010-08-11 23:54:51 +02:00
$args [ 'selected_cats' ] = array ();
2014-05-15 05:09:15 +02:00
}
if ( is_array ( $r [ 'popular_cats' ] ) ) {
$args [ 'popular_cats' ] = $r [ 'popular_cats' ];
} else {
$args [ 'popular_cats' ] = get_terms ( $taxonomy , array (
'fields' => 'ids' ,
'orderby' => 'count' ,
'order' => 'DESC' ,
'number' => 10 ,
'hierarchical' => false
) );
}
2010-08-11 23:54:51 +02:00
if ( $descendants_and_self ) {
2014-05-15 05:09:15 +02:00
$categories = ( array ) get_terms ( $taxonomy , array (
'child_of' => $descendants_and_self ,
'hierarchical' => 0 ,
'hide_empty' => 0
) );
2010-08-11 23:54:51 +02:00
$self = get_term ( $descendants_and_self , $taxonomy );
array_unshift ( $categories , $self );
} else {
2014-05-15 05:09:15 +02:00
$categories = ( array ) get_terms ( $taxonomy , array ( 'get' => 'all' ) );
2008-06-15 02:45:01 +02:00
}
2008-08-09 07:36:14 +02:00
2014-05-15 05:09:15 +02:00
if ( $r [ 'checked_ontop' ] ) {
2010-08-11 23:54:51 +02:00
// Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache)
$checked_categories = array ();
$keys = array_keys ( $categories );
foreach ( $keys as $k ) {
if ( in_array ( $categories [ $k ] -> term_id , $args [ 'selected_cats' ] ) ) {
$checked_categories [] = $categories [ $k ];
unset ( $categories [ $k ] );
}
}
// Put checked cats on top
2014-05-15 05:09:15 +02:00
echo call_user_func_array ( array ( $walker , 'walk' ), array ( $checked_categories , 0 , $args ) );
2010-08-11 23:54:51 +02:00
}
// Then the rest of them
2014-05-15 05:09:15 +02:00
echo call_user_func_array ( array ( $walker , 'walk' ), array ( $categories , 0 , $args ) );
2007-12-14 07:20:42 +01:00
}
2008-10-02 03:03:26 +02:00
/**
2012-04-04 19:32:03 +02:00
* Retrieve a list of the most popular terms from the specified taxonomy .
*
* If the $echo argument is true then the elements for a list of checkbox
* < input > elements labelled with the names of the selected terms is output .
* If the $post_ID global isn ' t empty then the terms associated with that
* post will be marked as checked .
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 0
2008-10-02 03:03:26 +02:00
*
2012-04-04 19:32:03 +02:00
* @ param string $taxonomy Taxonomy to retrieve terms from .
* @ param int $default Unused .
* @ param int $number Number of terms to retrieve . Defaults to 10.
* @ param bool $echo Optionally output the list as well . Defaults to true .
* @ return array List of popular term IDs .
2008-10-02 03:03:26 +02:00
*/
2010-08-11 23:54:51 +02:00
function wp_popular_terms_checklist ( $taxonomy , $default = 0 , $number = 10 , $echo = true ) {
2012-09-04 18:29:28 +02:00
$post = get_post ();
2012-09-10 18:45:49 +02:00
if ( $post && $post -> ID )
2012-09-04 18:29:28 +02:00
$checked_terms = wp_get_object_terms ( $post -> ID , $taxonomy , array ( 'fields' => 'ids' ));
2010-08-11 23:54:51 +02:00
else
$checked_terms = array ();
2010-04-22 21:48:13 +02:00
2010-08-11 23:54:51 +02:00
$terms = get_terms ( $taxonomy , array ( 'orderby' => 'count' , 'order' => 'DESC' , 'number' => $number , 'hierarchical' => false ) );
2010-04-23 00:53:44 +02:00
2010-08-11 23:54:51 +02:00
$tax = get_taxonomy ( $taxonomy );
2009-02-01 10:45:24 +01:00
2010-08-11 23:54:51 +02:00
$popular_ids = array ();
foreach ( ( array ) $terms as $term ) {
$popular_ids [] = $term -> term_id ;
if ( ! $echo ) // hack for AJAX use
continue ;
$id = " popular- $taxonomy - $term->term_id " ;
$checked = in_array ( $term -> term_id , $checked_terms ) ? 'checked="checked"' : '' ;
?>
2009-02-01 10:45:24 +01:00
2010-08-11 23:54:51 +02:00
< li id = " <?php echo $id ; ?> " class = " popular-category " >
< label class = " selectit " >
2014-02-23 23:44:13 +01:00
< input id = " in-<?php echo $id ; ?> " type = " checkbox " < ? php echo $checked ; ?> value="<?php echo (int) $term->term_id; ?>" <?php disabled( ! current_user_can( $tax->cap->assign_terms ) ); ?> />
< ? php
/** This filter is documented in wp-includes/category-template.php */
echo esc_html ( apply_filters ( 'the_category' , $term -> name ) );
?>
2010-08-11 23:54:51 +02:00
</ label >
</ li >
2008-09-19 07:31:00 +02:00
2010-08-11 23:54:51 +02:00
< ? php
2007-05-25 09:16:21 +02:00
}
2010-08-11 23:54:51 +02:00
return $popular_ids ;
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 1
2008-10-02 03:03:26 +02:00
*
2010-08-11 23:54:51 +02:00
* @ param unknown_type $link_id
2008-10-02 03:03:26 +02:00
*/
2010-08-11 23:54:51 +02:00
function wp_link_category_checklist ( $link_id = 0 ) {
$default = 1 ;
2007-05-25 09:16:21 +02:00
2010-08-11 23:54:51 +02:00
if ( $link_id ) {
$checked_categories = wp_get_link_cats ( $link_id );
// No selected categories, strange
if ( ! count ( $checked_categories ) )
$checked_categories [] = $default ;
2009-01-23 23:26:40 +01:00
} else {
2010-08-11 23:54:51 +02:00
$checked_categories [] = $default ;
2009-01-23 23:26:40 +01:00
}
2008-03-02 21:17:30 +01:00
2010-08-11 23:54:51 +02:00
$categories = get_terms ( 'link_category' , array ( 'orderby' => 'name' , 'hide_empty' => 0 ) );
2008-09-28 19:48:55 +02:00
2010-08-11 23:54:51 +02:00
if ( empty ( $categories ) )
return ;
2009-09-04 10:50:55 +02:00
2010-08-11 23:54:51 +02:00
foreach ( $categories as $category ) {
$cat_id = $category -> term_id ;
2014-02-23 23:44:13 +01:00
/** This filter is documented in wp-includes/category-template.php */
2010-08-11 23:54:51 +02:00
$name = esc_html ( apply_filters ( 'the_category' , $category -> name ) );
$checked = in_array ( $cat_id , $checked_categories ) ? ' checked="checked"' : '' ;
echo '<li id="link-category-' , $cat_id , '"><label for="in-link-category-' , $cat_id , '" class="selectit"><input value="' , $cat_id , '" type="checkbox" name="link_category[]" id="in-link-category-' , $cat_id , '"' , $checked , '/> ' , $name , " </label></li> " ;
2007-05-25 09:16:21 +02:00
}
}
2010-08-11 23:54:51 +02:00
// adds hidden fields with the data for use in the inline editor for posts and pages
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 2.7 . 0
2008-10-02 03:03:26 +02:00
*
2010-08-11 23:54:51 +02:00
* @ param unknown_type $post
2008-10-02 03:03:26 +02:00
*/
2010-08-11 23:54:51 +02:00
function get_inline_data ( $post ) {
2010-02-02 18:37:03 +01:00
$post_type_object = get_post_type_object ( $post -> post_type );
2013-07-08 22:05:42 +02:00
if ( ! current_user_can ( 'edit_post' , $post -> ID ) )
2010-08-11 23:54:51 +02:00
return ;
2008-03-02 21:17:30 +01:00
2011-02-07 20:11:17 +01:00
$title = esc_textarea ( trim ( $post -> post_title ) );
2008-08-20 06:06:36 +02:00
2014-02-23 23:44:13 +01:00
/** This filter is documented in wp-admin/edit-tag-form.php */
2010-08-11 23:54:51 +02:00
echo '
< div class = " hidden " id = " inline_' . $post->ID . ' " >
< div class = " post_title " > ' . $title . ' </ div >
2014-02-23 23:44:13 +01:00
< div class = " post_name " > ' . apply_filters( ' editable_slug ', $post->post_name ) . ' </ div >
2010-08-11 23:54:51 +02:00
< div class = " post_author " > ' . $post->post_author . ' </ div >
2011-02-07 20:11:17 +01:00
< div class = " comment_status " > ' . esc_html( $post->comment_status ) . ' </ div >
< div class = " ping_status " > ' . esc_html( $post->ping_status ) . ' </ div >
< div class = " _status " > ' . esc_html( $post->post_status ) . ' </ div >
2010-08-11 23:54:51 +02:00
< div class = " jj " > ' . mysql2date( ' d ', $post->post_date, false ) . ' </ div >
< div class = " mm " > ' . mysql2date( ' m ', $post->post_date, false ) . ' </ div >
< div class = " aa " > ' . mysql2date( ' Y ', $post->post_date, false ) . ' </ div >
< div class = " hh " > ' . mysql2date( ' H ', $post->post_date, false ) . ' </ div >
< div class = " mn " > ' . mysql2date( ' i ', $post->post_date, false ) . ' </ div >
< div class = " ss " > ' . mysql2date( ' s ', $post->post_date, false ) . ' </ div >
< div class = " post_password " > ' . esc_html( $post->post_password ) . ' </ div > ' ;
2009-12-25 03:46:40 +01:00
2010-08-11 23:54:51 +02:00
if ( $post_type_object -> hierarchical )
echo '<div class="post_parent">' . $post -> post_parent . '</div>' ;
2008-10-30 16:50:21 +01:00
2010-08-11 23:54:51 +02:00
if ( $post -> post_type == 'page' )
echo '<div class="page_template">' . esc_html ( get_post_meta ( $post -> ID , '_wp_page_template' , true ) ) . '</div>' ;
2009-07-21 05:11:12 +02:00
2012-02-15 18:19:59 +01:00
if ( post_type_supports ( $post -> post_type , 'page-attributes' ) )
2010-08-11 23:54:51 +02:00
echo '<div class="menu_order">' . $post -> menu_order . '</div>' ;
2009-07-21 05:11:12 +02:00
2010-08-11 23:54:51 +02:00
$taxonomy_names = get_object_taxonomies ( $post -> post_type );
foreach ( $taxonomy_names as $taxonomy_name ) {
$taxonomy = get_taxonomy ( $taxonomy_name );
2009-07-21 05:11:12 +02:00
2012-02-07 19:06:12 +01:00
if ( $taxonomy -> hierarchical && $taxonomy -> show_ui ) {
echo '<div class="post_category" id="' . $taxonomy_name . '_' . $post -> ID . '">'
. implode ( ',' , wp_get_object_terms ( $post -> ID , $taxonomy_name , array ( 'fields' => 'ids' ) ) ) . '</div>' ;
} elseif ( $taxonomy -> show_ui ) {
echo '<div class="tags_input" id="' . $taxonomy_name . '_' . $post -> ID . '">'
. esc_html ( str_replace ( ',' , ', ' , get_terms_to_edit ( $post -> ID , $taxonomy_name ) ) ) . '</div>' ;
}
2010-08-11 23:54:51 +02:00
}
2008-10-08 03:18:16 +02:00
2010-08-11 23:54:51 +02:00
if ( ! $post_type_object -> hierarchical )
echo '<div class="sticky">' . ( is_sticky ( $post -> ID ) ? 'sticky' : '' ) . '</div>' ;
2008-10-30 16:50:21 +01:00
2011-09-19 19:02:58 +02:00
if ( post_type_supports ( $post -> post_type , 'post-formats' ) )
echo '<div class="post_format">' . esc_html ( get_post_format ( $post -> ID ) ) . '</div>' ;
2010-08-11 23:54:51 +02:00
echo '</div>' ;
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 2.7 . 0
2008-10-02 03:03:26 +02:00
*
* @ param unknown_type $position
* @ param unknown_type $checkbox
* @ param unknown_type $mode
*/
2008-10-30 16:50:21 +01:00
function wp_comment_reply ( $position = '1' , $checkbox = false , $mode = 'single' , $table_row = true ) {
2014-02-23 23:44:13 +01:00
/**
* Filter the in - line comment reply - to form output in the Comments
* list table .
*
* Returning a non - empty value here will short - circuit display
* of the in - line comment - reply form in the Comments list table ,
* echoing the returned value instead .
*
* @ since 2.7 . 0
*
* @ see wp_comment_reply ()
*
* @ param string $content The reply - to form content .
* @ param array $args An array of default args .
*/
$content = apply_filters ( 'wp_comment_reply' , '' , array ( 'position' => $position , 'checkbox' => $checkbox , 'mode' => $mode ) );
2008-09-21 21:45:45 +02:00
2008-08-24 08:56:22 +02:00
if ( ! empty ( $content ) ) {
echo $content ;
return ;
}
2011-01-06 05:11:14 +01:00
2010-12-23 18:21:29 +01:00
if ( $mode == 'single' ) {
2011-01-16 22:47:24 +01:00
$wp_list_table = _get_list_table ( 'WP_Post_Comments_List_Table' );
2010-12-23 18:21:29 +01:00
} else {
2011-01-16 22:47:24 +01:00
$wp_list_table = _get_list_table ( 'WP_Comments_List_Table' );
2010-12-23 18:21:29 +01:00
}
2010-08-11 23:54:51 +02:00
2008-08-24 08:56:22 +02:00
?>
2008-10-09 01:32:34 +02:00
< form method = " get " action = " " >
< ? php if ( $table_row ) : ?>
2010-11-14 19:00:09 +01:00
< table style = " display:none; " >< tbody id = " com-reply " >< tr id = " replyrow " style = " display:none; " >< td colspan = " <?php echo $wp_list_table->get_column_count (); ?> " class = " colspanchange " >
2008-10-09 01:32:34 +02:00
< ? php else : ?>
2009-11-03 09:28:59 +01:00
< div id = " com-reply " style = " display:none; " >< div id = " replyrow " style = " display:none; " >
2008-10-09 01:32:34 +02:00
< ? php endif ; ?>
2011-09-28 23:07:08 +02:00
< div id = " replyhead " style = " display:none; " >< h5 >< ? php _e ( 'Reply to Comment' ); ?> </h5></div>
2012-03-09 02:30:11 +01:00
< div id = " addhead " style = " display:none; " >< h5 >< ? php _e ( 'Add new Comment' ); ?> </h5></div>
2008-10-08 03:18:16 +02:00
< div id = " edithead " style = " display:none; " >
< div class = " inside " >
2010-08-11 23:54:51 +02:00
< label for = " author " >< ? php _e ( 'Name' ) ?> </label>
2012-07-24 02:15:15 +02:00
< input type = " text " name = " newcomment_author " size = " 50 " value = " " id = " author " />
2008-10-08 03:18:16 +02:00
</ div >
< div class = " inside " >
2010-08-11 23:54:51 +02:00
< label for = " author-email " >< ? php _e ( 'E-mail' ) ?> </label>
2012-07-24 02:15:15 +02:00
< input type = " text " name = " newcomment_author_email " size = " 50 " value = " " id = " author-email " />
2008-10-08 03:18:16 +02:00
</ div >
< div class = " inside " >
2010-08-11 23:54:51 +02:00
< label for = " author-url " >< ? php _e ( 'URL' ) ?> </label>
2012-07-24 02:15:15 +02:00
< input type = " text " id = " author-url " name = " newcomment_author_url " size = " 103 " value = " " />
2008-10-08 03:18:16 +02:00
</ div >
< div style = " clear:both; " ></ div >
2008-08-24 08:56:22 +02:00
</ div >
2008-09-21 21:45:45 +02:00
2011-09-28 23:07:08 +02:00
< div id = " replycontainer " >
< ? php
2013-04-22 22:17:25 +02:00
$quicktags_settings = array ( 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' );
2012-07-24 02:15:15 +02:00
wp_editor ( '' , 'replycontent' , array ( 'media_buttons' => false , 'tinymce' => false , 'quicktags' => $quicktags_settings ) );
2011-09-28 23:07:08 +02:00
?>
</ div >
2008-10-08 03:18:16 +02:00
2008-11-11 03:58:24 +01:00
< p id = " replysubmit " class = " submit " >
2012-07-24 02:15:15 +02:00
< a href = " #comments-form " class = " save button-primary alignright " >
2012-03-09 02:30:11 +01:00
< span id = " addbtn " style = " display:none; " >< ? php _e ( 'Add Comment' ); ?> </span>
2008-12-09 10:07:36 +01:00
< span id = " savebtn " style = " display:none; " >< ? php _e ( 'Update Comment' ); ?> </span>
2008-10-08 03:18:16 +02:00
< span id = " replybtn " style = " display:none; " >< ? php _e ( 'Submit Reply' ); ?> </span></a>
2012-09-18 00:13:53 +02:00
< a href = " #comments-form " class = " cancel button-secondary alignleft " >< ? php _e ( 'Cancel' ); ?> </a>
2012-09-26 21:57:44 +02:00
< span class = " waiting spinner " ></ span >
2008-10-08 03:18:16 +02:00
< span class = " error " style = " display:none; " ></ span >
2008-11-11 03:58:24 +01:00
< br class = " clear " />
2008-10-08 03:18:16 +02:00
</ p >
2010-06-24 17:01:29 +02:00
< input type = " hidden " name = " user_ID " id = " user_ID " value = " <?php echo get_current_user_id(); ?> " />
2008-10-08 03:18:16 +02:00
< input type = " hidden " name = " action " id = " action " value = " " />
2008-08-24 08:56:22 +02:00
< input type = " hidden " name = " comment_ID " id = " comment_ID " value = " " />
< input type = " hidden " name = " comment_post_ID " id = " comment_post_ID " value = " " />
2008-10-08 03:18:16 +02:00
< input type = " hidden " name = " status " id = " status " value = " " />
2008-08-24 08:56:22 +02:00
< input type = " hidden " name = " position " id = " position " value = " <?php echo $position ; ?> " />
< input type = " hidden " name = " checkbox " id = " checkbox " value = " <?php echo $checkbox ? 1 : 0; ?> " />
2009-05-05 21:43:53 +02:00
< input type = " hidden " name = " mode " id = " mode " value = " <?php echo esc_attr( $mode ); ?> " />
2011-10-01 02:19:07 +02:00
< ? php
wp_nonce_field ( 'replyto-comment' , '_ajax_nonce-replyto-comment' , false );
if ( current_user_can ( 'unfiltered_html' ) )
wp_nonce_field ( 'unfiltered-html-comment' , '_wp_unfiltered_html_comment' , false );
?>
2008-10-09 01:32:34 +02:00
< ? php if ( $table_row ) : ?>
2008-10-11 01:54:27 +02:00
</ td ></ tr ></ tbody ></ table >
2008-10-09 01:32:34 +02:00
< ? php else : ?>
2008-10-30 16:50:21 +01:00
</ div ></ div >
2008-10-09 01:32:34 +02:00
< ? php endif ; ?>
2008-10-11 01:54:27 +02:00
</ form >
2008-08-24 08:56:22 +02:00
< ? php
}
2009-10-08 10:24:59 +02:00
/**
* Output 'undo move to trash' text for comments
*
* @ since 2.9 . 0
*/
function wp_comment_trashnotice () {
?>
2009-11-27 11:34:09 +01:00
< div class = " hidden " id = " trash-undo-holder " >
< div class = " trash-undo-inside " >< ? php printf ( __ ( 'Comment by %s moved to the trash.' ), '<strong></strong>' ); ?> <span class="undo untrash"><a href="#"><?php _e('Undo'); ?></a></span></div>
</ div >
< div class = " hidden " id = " spam-undo-holder " >
< div class = " spam-undo-inside " >< ? php printf ( __ ( 'Comment by %s marked as spam.' ), '<strong></strong>' ); ?> <span class="undo unspam"><a href="#"><?php _e('Undo'); ?></a></span></div>
2009-10-08 10:24:59 +02:00
</ div >
< ? php
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 1.2 . 0
2008-10-02 03:03:26 +02:00
*
* @ param unknown_type $meta
*/
2007-05-25 09:16:21 +02:00
function list_meta ( $meta ) {
// Exit if no meta
2008-11-08 03:15:53 +01:00
if ( ! $meta ) {
echo '
< table id = " list-table " style = " display: none; " >
< thead >
< tr >
2011-06-11 00:13:26 +02:00
< th class = " left " > ' . _x( ' Name ', ' meta name ' ) . ' </ th >
2008-11-08 03:15:53 +01:00
< th > ' . __( ' Value ' ) . ' </ th >
</ tr >
</ thead >
2012-11-06 02:01:52 +01:00
< tbody id = " the-list " data - wp - lists = " list:meta " >
2008-11-08 03:15:53 +01:00
< tr >< td ></ td ></ tr >
</ tbody >
</ table > ' ; //TBODY needed for list-manipulation JS
2007-05-25 09:16:21 +02:00
return ;
}
$count = 0 ;
?>
2008-11-08 03:15:53 +01:00
< table id = " list-table " >
2007-05-25 09:16:21 +02:00
< thead >
< tr >
2011-06-11 00:13:26 +02:00
< th class = " left " >< ? php _ex ( 'Name' , 'meta name' ) ?> </th>
2010-08-11 23:54:51 +02:00
< th >< ? php _e ( 'Value' ) ?> </th>
2007-05-25 09:16:21 +02:00
</ tr >
</ thead >
2012-11-06 02:01:52 +01:00
< tbody id = 'the-list' data - wp - lists = 'list:meta' >
2007-05-25 09:16:21 +02:00
< ? php
2007-10-10 00:49:42 +02:00
foreach ( $meta as $entry )
echo _list_meta_row ( $entry , $count );
2008-11-08 03:15:53 +01:00
?>
</ tbody >
</ table >
< ? php
2007-10-10 00:49:42 +02:00
}
2007-05-25 09:16:21 +02:00
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 0
2008-10-02 03:03:26 +02:00
*
* @ param unknown_type $entry
* @ param unknown_type $count
* @ return unknown
*/
2007-10-10 00:49:42 +02:00
function _list_meta_row ( $entry , & $count ) {
2008-03-22 09:15:48 +01:00
static $update_nonce = false ;
2011-05-23 01:19:42 +02:00
2011-07-21 00:04:35 +02:00
if ( is_protected_meta ( $entry [ 'meta_key' ], 'post' ) )
2011-05-23 01:19:42 +02:00
return ;
2008-03-22 09:15:48 +01:00
if ( ! $update_nonce )
$update_nonce = wp_create_nonce ( 'add-meta' );
2007-10-10 00:49:42 +02:00
$r = '' ;
++ $count ;
if ( $count % 2 )
$style = 'alternate' ;
else
$style = '' ;
if ( is_serialized ( $entry [ 'meta_value' ] ) ) {
if ( is_serialized_string ( $entry [ 'meta_value' ] ) ) {
// this is a serialized string, so we should display it
$entry [ 'meta_value' ] = maybe_unserialize ( $entry [ 'meta_value' ] );
} else {
// this is a serialized array/object so we should NOT display it
-- $count ;
return ;
}
2007-05-25 09:16:21 +02:00
}
2007-10-10 00:49:42 +02:00
2009-05-05 21:43:53 +02:00
$entry [ 'meta_key' ] = esc_attr ( $entry [ 'meta_key' ]);
2010-11-17 18:12:01 +01:00
$entry [ 'meta_value' ] = esc_textarea ( $entry [ 'meta_value' ] ); // using a <textarea />
2007-10-10 00:49:42 +02:00
$entry [ 'meta_id' ] = ( int ) $entry [ 'meta_id' ];
2008-03-22 09:15:48 +01:00
$delete_nonce = wp_create_nonce ( 'delete-meta_' . $entry [ 'meta_id' ] );
2007-10-10 00:49:42 +02:00
$r .= " \n \t <tr id='meta- { $entry [ 'meta_id' ] } ' class=' $style '> " ;
2014-03-27 07:56:14 +01:00
$r .= " \n \t \t <td class='left'><label class='screen-reader-text' for='meta- { $entry [ 'meta_id' ] } -key'> " . __ ( 'Key' ) . " </label><input name='meta[ { $entry [ 'meta_id' ] } ][key]' id='meta- { $entry [ 'meta_id' ] } -key' type='text' size='20' value=' { $entry [ 'meta_key' ] } ' /> " ;
2008-11-08 03:15:53 +01:00
2010-10-28 23:56:43 +02:00
$r .= " \n \t \t <div class='submit'> " ;
2012-11-06 02:01:52 +01:00
$r .= get_submit_button ( __ ( 'Delete' ), 'deletemeta small' , " deletemeta[ { $entry [ 'meta_id' ] } ] " , false , array ( 'data-wp-lists' => " delete:the-list:meta- { $entry [ 'meta_id' ] } ::_ajax_nonce= $delete_nonce " ) );
2010-10-28 23:56:43 +02:00
$r .= " \n \t \t " ;
2012-11-06 02:01:52 +01:00
$r .= get_submit_button ( __ ( 'Update' ), 'updatemeta small' , " meta- { $entry [ 'meta_id' ] } -submit " , false , array ( 'data-wp-lists' => " add:the-list:meta- { $entry [ 'meta_id' ] } ::_ajax_nonce-add-meta= $update_nonce " ) );
2010-10-28 23:56:43 +02:00
$r .= " </div> " ;
2008-03-22 09:15:48 +01:00
$r .= wp_nonce_field ( 'change-meta' , '_ajax_nonce' , false , false );
2008-11-08 03:15:53 +01:00
$r .= " </td> " ;
2008-12-09 19:03:31 +01:00
2014-03-27 07:56:14 +01:00
$r .= " \n \t \t <td><label class='screen-reader-text' for='meta- { $entry [ 'meta_id' ] } -value'> " . __ ( 'Value' ) . " </label><textarea name='meta[ { $entry [ 'meta_id' ] } ][value]' id='meta- { $entry [ 'meta_id' ] } -value' rows='2' cols='30'> { $entry [ 'meta_value' ] } </textarea></td> \n \t </tr> " ;
2007-10-10 00:49:42 +02:00
return $r ;
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
2013-09-24 03:31:10 +02:00
* Prints the form in the Custom Fields meta box .
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 1.2 . 0
2013-09-24 03:31:10 +02:00
*
* @ param WP_Post $post Optional . The post being edited .
2008-10-02 03:03:26 +02:00
*/
2013-09-24 03:31:10 +02:00
function meta_form ( $post = null ) {
2007-05-25 09:16:21 +02:00
global $wpdb ;
2013-09-24 03:31:10 +02:00
$post = get_post ( $post );
2014-02-23 23:44:13 +01:00
/**
* Filter the number of custom fields to retrieve for the drop - down
* in the Custom Fields meta box .
*
* @ since 2.1 . 0
*
* @ param int $limit Number of custom fields to retrieve . Default 30.
*/
2007-05-25 09:16:21 +02:00
$limit = ( int ) apply_filters ( 'postmeta_form_limit' , 30 );
$keys = $wpdb -> get_col ( "
SELECT meta_key
FROM $wpdb -> postmeta
GROUP BY meta_key
2009-05-05 07:40:03 +02:00
HAVING meta_key NOT LIKE '\_%'
2010-02-28 14:15:54 +01:00
ORDER BY meta_key
2007-05-25 09:16:21 +02:00
LIMIT $limit " );
2014-03-27 07:56:14 +01:00
if ( $keys ) {
natcasesort ( $keys );
$meta_key_input_id = 'metakeyselect' ;
} else {
$meta_key_input_id = 'metakeyinput' ;
}
2007-05-25 09:16:21 +02:00
?>
2010-08-11 23:54:51 +02:00
< p >< strong >< ? php _e ( 'Add New Custom Field:' ) ?> </strong></p>
2008-11-08 03:15:53 +01:00
< table id = " newmeta " >
< thead >
< tr >
2014-03-27 07:56:14 +01:00
< th class = " left " >< label for = " <?php echo $meta_key_input_id ; ?> " >< ? php _ex ( 'Name' , 'meta name' ) ?> </label></th>
2010-08-11 23:54:51 +02:00
< th >< label for = " metavalue " >< ? php _e ( 'Value' ) ?> </label></th>
2007-05-25 09:16:21 +02:00
</ tr >
2008-11-08 03:15:53 +01:00
</ thead >
< tbody >
< tr >
< td id = " newmetaleft " class = " left " >
2008-12-01 01:29:14 +01:00
< ? php if ( $keys ) { ?>
2012-07-24 02:15:15 +02:00
< select id = " metakeyselect " name = " metakeyselect " >
2010-01-21 22:37:43 +01:00
< option value = " #NONE# " >< ? php _e ( '— Select —' ); ?> </option>
2007-05-25 09:16:21 +02:00
< ? php
foreach ( $keys as $key ) {
2013-09-24 03:31:10 +02:00
if ( is_protected_meta ( $key , 'post' ) || ! current_user_can ( 'add_post_meta' , $post -> ID , $key ) )
2013-02-28 20:51:29 +01:00
continue ;
2010-08-11 23:54:51 +02:00
echo " \n <option value=' " . esc_attr ( $key ) . " '> " . esc_html ( $key ) . " </option> " ;
2007-05-25 09:16:21 +02:00
}
?>
2008-11-08 03:15:53 +01:00
</ select >
2012-07-24 02:15:15 +02:00
< input class = " hide-if-js " type = " text " id = " metakeyinput " name = " metakeyinput " value = " " />
2010-02-28 20:39:06 +01:00
< a href = " #postcustomstuff " class = " hide-if-no-js " onclick = " jQuery('#metakeyinput, #metakeyselect, #enternew, #cancelnew').toggle();return false; " >
2008-11-08 03:15:53 +01:00
< span id = " enternew " >< ? php _e ( 'Enter new' ); ?> </span>
2008-12-01 01:29:14 +01:00
< span id = " cancelnew " class = " hidden " >< ? php _e ( 'Cancel' ); ?> </span></a>
< ? php } else { ?>
2012-07-24 02:15:15 +02:00
< input type = " text " id = " metakeyinput " name = " metakeyinput " value = " " />
2008-12-01 01:29:14 +01:00
< ? php } ?>
2007-05-25 09:16:21 +02:00
</ td >
2012-07-24 02:15:15 +02:00
< td >< textarea id = " metavalue " name = " metavalue " rows = " 2 " cols = " 25 " ></ textarea ></ td >
2008-11-08 03:15:53 +01:00
</ tr >
2012-09-23 19:42:46 +02:00
< tr >< td colspan = " 2 " >
< div class = " submit " >
2012-11-06 02:01:52 +01:00
< ? php submit_button ( __ ( 'Add Custom Field' ), 'secondary' , 'addmeta' , false , array ( 'id' => 'newmeta-submit' , 'data-wp-lists' => 'add:the-list:newmeta' ) ); ?>
2012-09-23 19:42:46 +02:00
</ div >
2010-05-26 06:55:21 +02:00
< ? php wp_nonce_field ( 'add-meta' , '_ajax_nonce-add-meta' , false ); ?>
2007-10-10 00:49:42 +02:00
</ td ></ tr >
2008-11-08 03:15:53 +01:00
</ tbody >
2007-05-25 09:16:21 +02:00
</ table >
< ? php
}
2008-10-02 03:03:26 +02:00
/**
2014-02-17 23:27:15 +01:00
* Print out HTML form date elements for editing post or comment publish date .
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 0.71
2008-10-02 03:03:26 +02:00
*
2014-02-17 23:27:15 +01:00
* @ param int | bool $edit Accepts 1 | true for editing the date , 0 | false for adding the date .
* @ param int | bool $for_post Accepts 1 | true for applying the date to a post , 0 | false for a comment .
* @ param int | bool $tab_index The tabindex attribute to add . Default 0.
* @ param int | bool $multi Optional . Whether the additional fields and buttons should be added .
* Default 0 | false .
2008-10-02 03:03:26 +02:00
*/
2008-09-11 00:47:03 +02:00
function touch_time ( $edit = 1 , $for_post = 1 , $tab_index = 0 , $multi = 0 ) {
2012-09-04 18:29:28 +02:00
global $wp_locale , $comment ;
$post = get_post ();
2007-05-25 09:16:21 +02:00
if ( $for_post )
2010-03-19 22:15:00 +01:00
$edit = ! ( in_array ( $post -> post_status , array ( 'draft' , 'pending' ) ) && ( ! $post -> post_date_gmt || '0000-00-00 00:00:00' == $post -> post_date_gmt ) );
2008-02-05 07:47:27 +01:00
2007-09-11 21:08:26 +02:00
$tab_index_attribute = '' ;
if ( ( int ) $tab_index > 0 )
$tab_index_attribute = " tabindex= \" $tab_index\ " " ;
2007-06-14 04:25:30 +02:00
2008-03-17 00:05:16 +01:00
// echo '<label for="timestamp" style="display: block;"><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp"'.$tab_index_attribute.' /> '.__( 'Edit timestamp' ).'</label><br />';
2007-05-25 09:16:21 +02:00
2009-12-30 18:56:09 +01:00
$time_adj = current_time ( 'timestamp' );
2007-05-25 09:16:21 +02:00
$post_date = ( $for_post ) ? $post -> post_date : $comment -> comment_date ;
2009-05-14 04:00:32 +02:00
$jj = ( $edit ) ? mysql2date ( 'd' , $post_date , false ) : gmdate ( 'd' , $time_adj );
$mm = ( $edit ) ? mysql2date ( 'm' , $post_date , false ) : gmdate ( 'm' , $time_adj );
$aa = ( $edit ) ? mysql2date ( 'Y' , $post_date , false ) : gmdate ( 'Y' , $time_adj );
$hh = ( $edit ) ? mysql2date ( 'H' , $post_date , false ) : gmdate ( 'H' , $time_adj );
$mn = ( $edit ) ? mysql2date ( 'i' , $post_date , false ) : gmdate ( 'i' , $time_adj );
$ss = ( $edit ) ? mysql2date ( 's' , $post_date , false ) : gmdate ( 's' , $time_adj );
2007-05-25 09:16:21 +02:00
2008-10-29 20:22:56 +01:00
$cur_jj = gmdate ( 'd' , $time_adj );
$cur_mm = gmdate ( 'm' , $time_adj );
$cur_aa = gmdate ( 'Y' , $time_adj );
$cur_hh = gmdate ( 'H' , $time_adj );
$cur_mn = gmdate ( 'i' , $time_adj );
2008-09-11 00:47:03 +02:00
$month = " <select " . ( $multi ? '' : 'id="mm" ' ) . " name= \" mm \" $tab_index_attribute > \n " ;
2007-07-17 21:26:03 +02:00
for ( $i = 1 ; $i < 13 ; $i = $i + 1 ) {
2011-10-01 22:50:08 +02:00
$monthnum = zeroise ( $i , 2 );
2014-02-19 16:29:14 +01:00
$month .= " \t \t \t " . '<option value="' . $monthnum . '" ' . selected ( $monthnum , $mm , false ) . '>' ;
2012-02-03 01:23:25 +01:00
/* translators: 1: month number (01, 02, etc.), 2: month abbreviation */
2014-02-17 23:27:15 +01:00
$month .= sprintf ( __ ( '%1$s-%2$s' ), $monthnum , $wp_locale -> get_month_abbrev ( $wp_locale -> get_month ( $i ) ) ) . " </option> \n " ;
2007-07-17 21:26:03 +02:00
}
2008-02-23 00:13:02 +01:00
$month .= '</select>' ;
2012-03-19 20:30:07 +01:00
$day = '<input type="text" ' . ( $multi ? '' : 'id="jj" ' ) . 'name="jj" value="' . $jj . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />' ;
$year = '<input type="text" ' . ( $multi ? '' : 'id="aa" ' ) . 'name="aa" value="' . $aa . '" size="4" maxlength="4"' . $tab_index_attribute . ' autocomplete="off" />' ;
$hour = '<input type="text" ' . ( $multi ? '' : 'id="hh" ' ) . 'name="hh" value="' . $hh . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />' ;
$minute = '<input type="text" ' . ( $multi ? '' : 'id="mn" ' ) . 'name="mn" value="' . $mn . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />' ;
2009-12-03 10:56:20 +01:00
echo '<div class="timestamp-wrap">' ;
2013-04-22 21:04:02 +02:00
/* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */
printf ( __ ( '%1$s %2$s, %3$s @ %4$s : %5$s' ), $month , $day , $year , $hour , $minute );
2008-09-11 00:47:03 +02:00
2009-12-03 10:56:20 +01:00
echo '</div><input type="hidden" id="ss" name="ss" value="' . $ss . '" />' ;
2008-11-15 13:04:38 +01:00
2008-09-11 00:47:03 +02:00
if ( $multi ) return ;
2008-09-21 21:45:45 +02:00
2008-03-17 00:05:16 +01:00
echo " \n \n " ;
2008-10-29 20:22:56 +01:00
foreach ( array ( 'mm' , 'jj' , 'aa' , 'hh' , 'mn' ) as $timeunit ) {
2008-03-17 00:05:16 +01:00
echo '<input type="hidden" id="hidden_' . $timeunit . '" name="hidden_' . $timeunit . '" value="' . $$timeunit . '" />' . " \n " ;
2008-10-29 20:22:56 +01:00
$cur_timeunit = 'cur_' . $timeunit ;
2014-02-17 23:27:15 +01:00
echo '<input type="hidden" id="' . $cur_timeunit . '" name="' . $cur_timeunit . '" value="' . $$cur_timeunit . '" />' . " \n " ;
2008-10-29 20:22:56 +01:00
}
2007-05-25 09:16:21 +02:00
?>
2008-03-17 00:05:16 +01:00
2008-10-29 09:19:15 +01:00
< p >
2008-08-20 06:06:36 +02:00
< a href = " #edit_timestamp " class = " save-timestamp hide-if-no-js button " >< ? php _e ( 'OK' ); ?> </a>
2013-11-18 19:53:10 +01:00
< a href = " #edit_timestamp " class = " cancel-timestamp hide-if-no-js button-cancel " >< ? php _e ( 'Cancel' ); ?> </a>
2008-10-29 09:19:15 +01:00
</ p >
2007-05-25 09:16:21 +02:00
< ? php
}
2008-10-02 03:03:26 +02:00
/**
2014-02-17 23:27:15 +01:00
* Print out < option > HTML elements for the page templates drop - down .
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 1.5 . 0
2008-10-02 03:03:26 +02:00
*
2014-02-17 23:27:15 +01:00
* @ param string $default Optional . The template file name . Default empty .
2008-10-02 03:03:26 +02:00
*/
2007-05-25 09:16:21 +02:00
function page_template_dropdown ( $default = '' ) {
2014-03-08 05:19:16 +01:00
$templates = get_page_templates ( get_post () );
2007-05-25 09:16:21 +02:00
ksort ( $templates );
2014-02-17 23:27:15 +01:00
foreach ( array_keys ( $templates ) as $template ) {
$selected = selected ( $default , $templates [ $template ], false );
echo " \n \t <option value=' " . $templates [ $template ] . " ' $selected > $template </option> " ;
}
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
2014-02-17 23:27:15 +01:00
* Print out < option > HTML elements for the page parents drop - down .
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 1.5 . 0
2008-10-02 03:03:26 +02:00
*
2014-02-17 23:27:15 +01:00
* @ param int $default Optional . The default page ID to be pre - selected . Default 0.
* @ param int $parent Optional . The parent page ID . Default 0.
* @ param int $level Optional . Page depth level . Default 0.
*
* @ return void | bool Boolean False if page has no children , otherwise print out html elements
2008-10-02 03:03:26 +02:00
*/
2007-05-25 09:16:21 +02:00
function parent_dropdown ( $default = 0 , $parent = 0 , $level = 0 ) {
2012-09-04 18:29:28 +02:00
global $wpdb ;
$post = get_post ();
2008-04-14 18:13:25 +02:00
$items = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' ORDER BY menu_order " , $parent ) );
2007-05-25 09:16:21 +02:00
if ( $items ) {
foreach ( $items as $item ) {
// A page cannot be its own parent.
2013-01-28 03:55:06 +01:00
if ( $post && $post -> ID && $item -> ID == $post -> ID )
2012-09-04 18:29:28 +02:00
continue ;
2007-05-25 09:16:21 +02:00
$pad = str_repeat ( ' ' , $level * 3 );
2014-02-17 23:27:15 +01:00
$selected = selected ( $default , $item -> ID , false );
2007-05-25 09:16:21 +02:00
2014-02-17 23:27:15 +01:00
echo " \n \t <option class='level- $level ' value=' $item->ID ' $selected > $pad " . esc_html ( $item -> post_title ) . " </option> " ;
2007-05-25 09:16:21 +02:00
parent_dropdown ( $default , $item -> ID , $level + 1 );
}
} else {
return false ;
}
}
2008-10-02 03:03:26 +02:00
/**
2010-09-07 13:21:11 +02:00
* Print out < option > html elements for role selectors
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 2.1 . 0
2008-10-02 03:03:26 +02:00
*
2010-09-07 13:21:11 +02:00
* @ param string $selected slug for the role that should be already selected
2008-10-02 03:03:26 +02:00
*/
2008-12-31 18:40:05 +01:00
function wp_dropdown_roles ( $selected = false ) {
2008-08-14 19:00:37 +02:00
$p = '' ;
2007-05-25 09:16:21 +02:00
$r = '' ;
2009-02-01 10:45:24 +01:00
2013-10-06 12:56:09 +02:00
$editable_roles = array_reverse ( get_editable_roles () );
2009-02-01 10:45:24 +01:00
2010-02-20 03:01:46 +01:00
foreach ( $editable_roles as $role => $details ) {
2009-03-11 00:02:29 +01:00
$name = translate_user_role ( $details [ 'name' ] );
2010-09-07 13:21:11 +02:00
if ( $selected == $role ) // preselect specified role
2009-05-05 21:43:53 +02:00
$p = " \n \t <option selected='selected' value=' " . esc_attr ( $role ) . " '> $name </option> " ;
2007-05-25 09:16:21 +02:00
else
2009-05-05 21:43:53 +02:00
$r .= " \n \t <option value=' " . esc_attr ( $role ) . " '> $name </option> " ;
2008-02-19 21:28:54 +01:00
}
2007-05-25 09:16:21 +02:00
echo $p . $r ;
}
2008-10-02 03:03:26 +02:00
/**
2009-09-23 08:59:20 +02:00
* Outputs the form used by the importers to accept the data to be imported
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 2.0 . 0
2008-10-02 03:03:26 +02:00
*
2009-09-23 08:59:20 +02:00
* @ param string $action The action attribute for the form .
2008-10-02 03:03:26 +02:00
*/
2008-01-25 20:21:11 +01:00
function wp_import_upload_form ( $action ) {
2014-02-23 23:44:13 +01:00
/**
* Filter the maximum allowed upload size for import files .
*
* @ since 2.3 . 0
*
* @ see wp_max_upload_size ()
*
* @ param int $max_upload_size Allowed upload size . Default 1 MB .
*/
2008-01-25 20:21:11 +01:00
$bytes = apply_filters ( 'import_upload_size_limit' , wp_max_upload_size () );
2013-02-16 04:07:56 +01:00
$size = size_format ( $bytes );
2009-02-12 20:39:35 +01:00
$upload_dir = wp_upload_dir ();
if ( ! empty ( $upload_dir [ 'error' ] ) ) :
?> <div class="error"><p><?php _e('Before you can upload your import file, you will need to fix the following error:'); ?></p>
2009-03-18 03:43:45 +01:00
< p >< strong >< ? php echo $upload_dir [ 'error' ]; ?> </strong></p></div><?php
else :
2007-05-25 09:16:21 +02:00
?>
2013-03-18 15:01:25 +01:00
< form enctype = " multipart/form-data " id = " import-upload-form " method = " post " class = " wp-upload-form " action = " <?php echo esc_url( wp_nonce_url( $action , 'import-upload' ) ); ?> " >
2007-05-25 09:16:21 +02:00
< p >
2007-08-29 01:13:16 +02:00
< label for = " upload " >< ? php _e ( 'Choose a file from your computer:' ); ?> </label> (<?php printf( __('Maximum size: %s' ), $size ); ?>)
2007-05-25 09:16:21 +02:00
< input type = " file " id = " upload " name = " import " size = " 25 " />
< input type = " hidden " name = " action " value = " save " />
< input type = " hidden " name = " max_file_size " value = " <?php echo $bytes ; ?> " />
</ p >
2010-10-28 23:56:43 +02:00
< ? php submit_button ( __ ( 'Upload file and import' ), 'button' ); ?>
2007-05-25 09:16:21 +02:00
</ form >
< ? php
2009-02-12 20:39:35 +01:00
endif ;
2007-05-25 09:16:21 +02:00
}
2008-02-08 19:51:37 +01:00
/**
2008-10-02 03:03:26 +02:00
* Add a meta box to an edit form .
2008-02-08 19:51:37 +01:00
*
2008-10-02 03:03:26 +02:00
* @ since 2.5 . 0
2008-02-08 19:51:37 +01:00
*
2014-02-08 01:55:12 +01:00
* @ param string $id String for use in the 'id' attribute of tags .
* @ param string $title Title of the meta box .
* @ param callback $callback Function that fills the box with the desired content .
* The function should echo its output .
* @ param string | WP_Screen $screen Optional . The screen on which to show the box ( like a post
* type , 'link' , or 'comment' ) . Default is the current screen .
* @ param string $context Optional . The context within the screen where the boxes
* should display . Available contexts vary from screen to
* screen . Post edit screen contexts include 'normal' , 'side' ,
* and 'advanced' . Comments screen contexts include 'normal'
* and 'side' . Menus meta boxes ( accordion sections ) all use
* the 'side' context . Global default is 'advanced' .
* @ param string $priority Optional . The priority within the context where the boxes
* should show ( 'high' , 'low' ) . Default 'default' .
* @ param array $callback_args Optional . Data that should be set as the $args property
* of the box array ( which is the second parameter passed
* to your callback ) . Default null .
2008-02-08 19:51:37 +01:00
*/
2011-10-20 01:01:55 +02:00
function add_meta_box ( $id , $title , $callback , $screen = null , $context = 'advanced' , $priority = 'default' , $callback_args = null ) {
2008-02-08 19:51:37 +01:00
global $wp_meta_boxes ;
2011-10-19 23:43:02 +02:00
if ( empty ( $screen ) )
$screen = get_current_screen ();
elseif ( is_string ( $screen ) )
$screen = convert_to_screen ( $screen );
$page = $screen -> id ;
2008-09-21 21:45:45 +02:00
if ( ! isset ( $wp_meta_boxes ) )
2008-02-08 22:06:15 +01:00
$wp_meta_boxes = array ();
if ( ! isset ( $wp_meta_boxes [ $page ]) )
$wp_meta_boxes [ $page ] = array ();
if ( ! isset ( $wp_meta_boxes [ $page ][ $context ]) )
$wp_meta_boxes [ $page ][ $context ] = array ();
2008-08-20 06:06:36 +02:00
foreach ( array_keys ( $wp_meta_boxes [ $page ]) as $a_context ) {
2010-11-20 20:20:32 +01:00
foreach ( array ( 'high' , 'core' , 'default' , 'low' ) as $a_priority ) {
if ( ! isset ( $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ]) )
continue ;
2010-12-13 22:21:50 +01:00
2010-11-20 20:20:32 +01:00
// If a core box was previously added or removed by a plugin, don't add.
if ( 'core' == $priority ) {
// If core box previously deleted, don't add
if ( false === $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ] )
return ;
// If box was added with default priority, give it core priority to maintain sort order
if ( 'default' == $a_priority ) {
$wp_meta_boxes [ $page ][ $a_context ][ 'core' ][ $id ] = $wp_meta_boxes [ $page ][ $a_context ][ 'default' ][ $id ];
unset ( $wp_meta_boxes [ $page ][ $a_context ][ 'default' ][ $id ]);
}
2008-05-14 10:22:01 +02:00
return ;
}
2010-11-20 20:20:32 +01:00
// If no priority given and id already present, use existing priority
if ( empty ( $priority ) ) {
$priority = $a_priority ;
2011-09-03 16:18:10 +02:00
// else if we're adding to the sorted priority, we don't know the title or callback. Grab them from the previously added context/priority.
2010-11-20 20:20:32 +01:00
} elseif ( 'sorted' == $priority ) {
$title = $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ][ 'title' ];
$callback = $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ][ 'callback' ];
$callback_args = $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ][ 'args' ];
}
// An id can be in only one priority and one context
if ( $priority != $a_priority || $context != $a_context )
unset ( $wp_meta_boxes [ $page ][ $a_context ][ $a_priority ][ $id ]);
2008-08-20 06:06:36 +02:00
}
2008-05-14 10:22:01 +02:00
}
if ( empty ( $priority ) )
2008-08-20 06:06:36 +02:00
$priority = 'low' ;
2008-05-14 10:22:01 +02:00
if ( ! isset ( $wp_meta_boxes [ $page ][ $context ][ $priority ]) )
$wp_meta_boxes [ $page ][ $context ][ $priority ] = array ();
2008-12-18 20:12:26 +01:00
$wp_meta_boxes [ $page ][ $context ][ $priority ][ $id ] = array ( 'id' => $id , 'title' => $title , 'callback' => $callback , 'args' => $callback_args );
2008-02-08 19:51:37 +01:00
}
2008-10-02 03:03:26 +02:00
/**
2010-05-19 21:11:33 +02:00
* Meta - Box template function
2008-10-02 03:03:26 +02:00
*
2010-05-19 21:11:33 +02:00
* @ since 2.5 . 0
2008-10-02 03:03:26 +02:00
*
2011-10-19 23:43:02 +02:00
* @ param string | object $screen Screen identifier
2010-05-19 21:11:33 +02:00
* @ param string $context box context
* @ param mixed $object gets passed to the box callback function as first parameter
2008-10-09 01:32:34 +02:00
* @ return int number of meta_boxes
2008-10-02 03:03:26 +02:00
*/
2011-10-19 23:43:02 +02:00
function do_meta_boxes ( $screen , $context , $object ) {
2008-02-08 19:51:37 +01:00
global $wp_meta_boxes ;
2008-08-20 06:06:36 +02:00
static $already_sorted = false ;
2008-02-08 19:51:37 +01:00
2011-10-19 23:43:02 +02:00
if ( empty ( $screen ) )
$screen = get_current_screen ();
elseif ( is_string ( $screen ) )
$screen = convert_to_screen ( $screen );
$page = $screen -> id ;
$hidden = get_hidden_meta_boxes ( $screen );
2008-08-22 20:58:42 +02:00
2010-05-26 04:42:15 +02:00
printf ( '<div id="%s-sortables" class="meta-box-sortables">' , htmlspecialchars ( $context ));
2008-02-08 19:51:37 +01:00
2008-08-20 06:06:36 +02:00
$i = 0 ;
2008-09-21 21:45:45 +02:00
do {
// Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
2010-01-07 01:01:52 +01:00
if ( ! $already_sorted && $sorted = get_user_option ( " meta-box-order_ $page " ) ) {
2011-06-13 03:03:55 +02:00
foreach ( $sorted as $box_context => $ids ) {
2011-06-15 21:23:35 +02:00
foreach ( explode ( ',' , $ids ) as $id ) {
2011-06-18 17:05:46 +02:00
if ( $id && 'dashboard_browser_nag' !== $id )
2011-10-19 23:43:02 +02:00
add_meta_box ( $id , null , null , $screen , $box_context , 'sorted' );
2011-06-13 02:24:47 +02:00
}
2011-06-13 03:03:55 +02:00
}
2008-08-20 06:06:36 +02:00
}
$already_sorted = true ;
2008-08-08 19:05:10 +02:00
2008-08-20 06:06:36 +02:00
if ( ! isset ( $wp_meta_boxes ) || ! isset ( $wp_meta_boxes [ $page ]) || ! isset ( $wp_meta_boxes [ $page ][ $context ]) )
break ;
foreach ( array ( 'high' , 'sorted' , 'core' , 'default' , 'low' ) as $priority ) {
2008-08-25 23:50:11 +02:00
if ( isset ( $wp_meta_boxes [ $page ][ $context ][ $priority ]) ) {
foreach ( ( array ) $wp_meta_boxes [ $page ][ $context ][ $priority ] as $box ) {
if ( false == $box || ! $box [ 'title' ] )
continue ;
$i ++ ;
2010-05-05 00:28:51 +02:00
$hidden_class = in_array ( $box [ 'id' ], $hidden ) ? ' hide-if-js' : '' ;
echo '<div id="' . $box [ 'id' ] . '" class="postbox ' . postbox_classes ( $box [ 'id' ], $page ) . $hidden_class . '" ' . '>' . " \n " ;
2011-05-18 19:06:04 +02:00
if ( 'dashboard_browser_nag' != $box [ 'id' ] )
echo '<div class="handlediv" title="' . esc_attr__ ( 'Click to toggle' ) . '"><br /></div>' ;
2008-12-01 02:31:57 +01:00
echo " <h3 class='hndle'><span> { $box [ 'title' ] } </span></h3> \n " ;
2008-08-25 23:50:11 +02:00
echo '<div class="inside">' . " \n " ;
call_user_func ( $box [ 'callback' ], $object , $box );
echo " </div> \n " ;
echo " </div> \n " ;
}
2008-08-20 06:06:36 +02:00
}
2008-05-14 10:22:01 +02:00
}
2008-08-20 06:06:36 +02:00
} while ( 0 );
2010-08-11 23:54:51 +02:00
echo " </div> " ;
2008-08-20 06:06:36 +02:00
return $i ;
2008-02-08 19:51:37 +01:00
}
2008-05-14 10:22:01 +02:00
/**
2008-10-02 03:03:26 +02:00
* Remove a meta box from an edit form .
2008-05-14 10:22:01 +02:00
*
2008-10-02 03:03:26 +02:00
* @ since 2.6 . 0
2008-05-14 10:22:01 +02:00
*
* @ param string $id String for use in the 'id' attribute of tags .
2011-10-19 23:43:02 +02:00
* @ param string | object $screen The screen on which to show the box ( post , page , link ) .
2008-10-02 03:03:26 +02:00
* @ param string $context The context within the page where the boxes should show ( 'normal' , 'advanced' ) .
2008-05-14 10:22:01 +02:00
*/
2011-10-19 23:43:02 +02:00
function remove_meta_box ( $id , $screen , $context ) {
2008-05-14 10:22:01 +02:00
global $wp_meta_boxes ;
2011-10-19 23:43:02 +02:00
if ( empty ( $screen ) )
$screen = get_current_screen ();
elseif ( is_string ( $screen ) )
$screen = convert_to_screen ( $screen );
$page = $screen -> id ;
2008-09-21 21:45:45 +02:00
if ( ! isset ( $wp_meta_boxes ) )
2008-05-14 10:22:01 +02:00
$wp_meta_boxes = array ();
if ( ! isset ( $wp_meta_boxes [ $page ]) )
$wp_meta_boxes [ $page ] = array ();
if ( ! isset ( $wp_meta_boxes [ $page ][ $context ]) )
$wp_meta_boxes [ $page ][ $context ] = array ();
foreach ( array ( 'high' , 'core' , 'default' , 'low' ) as $priority )
$wp_meta_boxes [ $page ][ $context ][ $priority ][ $id ] = false ;
}
2013-03-15 14:16:38 +01:00
/**
* Meta Box Accordion Template Function
*
* Largely made up of abstracted code from { @ link do_meta_boxes ()}, this
* function serves to build meta boxes as list items for display as
* a collapsible accordion .
*
* @ since 3.6 . 0
*
* @ uses global $wp_meta_boxes Used to retrieve registered meta boxes .
*
* @ param string | object $screen The screen identifier .
* @ param string $context The meta box context .
* @ param mixed $object gets passed to the section callback function as first parameter .
* @ return int number of meta boxes as accordion sections .
*/
function do_accordion_sections ( $screen , $context , $object ) {
global $wp_meta_boxes ;
2013-07-12 20:16:29 +02:00
wp_enqueue_script ( 'accordion' );
2013-03-15 14:16:38 +01:00
if ( empty ( $screen ) )
$screen = get_current_screen ();
elseif ( is_string ( $screen ) )
$screen = convert_to_screen ( $screen );
$page = $screen -> id ;
$hidden = get_hidden_meta_boxes ( $screen );
?>
< div id = " side-sortables " class = " accordion-container " >
< ul class = " outer-border " >
< ? php
$i = 0 ;
2013-07-18 19:42:53 +02:00
$first_open = false ;
2013-03-15 14:16:38 +01:00
do {
if ( ! isset ( $wp_meta_boxes ) || ! isset ( $wp_meta_boxes [ $page ] ) || ! isset ( $wp_meta_boxes [ $page ][ $context ] ) )
break ;
2013-07-12 17:43:00 +02:00
foreach ( array ( 'high' , 'core' , 'default' , 'low' ) as $priority ) {
2013-03-15 14:16:38 +01:00
if ( isset ( $wp_meta_boxes [ $page ][ $context ][ $priority ] ) ) {
foreach ( $wp_meta_boxes [ $page ][ $context ][ $priority ] as $box ) {
if ( false == $box || ! $box [ 'title' ] )
continue ;
$i ++ ;
$hidden_class = in_array ( $box [ 'id' ], $hidden ) ? 'hide-if-js' : '' ;
2013-07-18 19:42:53 +02:00
$open_class = '' ;
if ( ! $first_open && empty ( $hidden_class ) ) {
$first_open = true ;
$open_class = 'open' ;
}
2013-03-15 14:16:38 +01:00
?>
2013-07-18 19:42:53 +02:00
< li class = " control-section accordion-section <?php echo $hidden_class ; ?> <?php echo $open_class ; ?> <?php echo esc_attr( $box['id'] ); ?> " id = " <?php echo esc_attr( $box['id'] ); ?> " >
2013-03-15 14:16:38 +01:00
< h3 class = " accordion-section-title hndle " tabindex = " 0 " title = " <?php echo esc_attr( $box['title'] ); ?> " >< ? php echo esc_html ( $box [ 'title' ] ); ?> </h3>
< div class = " accordion-section-content <?php postbox_classes( $box['id'] , $page ); ?> " >
< div class = " inside " >
< ? php call_user_func ( $box [ 'callback' ], $object , $box ); ?>
</ div ><!-- . inside -->
</ div ><!-- . accordion - section - content -->
</ li ><!-- . accordion - section -->
< ? php
}
}
}
} while ( 0 );
?>
</ ul ><!-- . outer - border -->
</ div ><!-- . accordion - container -->
< ? php
return $i ;
}
2008-09-10 00:31:22 +02:00
/**
2008-10-02 03:03:26 +02:00
* Add a new section to a settings page .
2008-09-10 00:31:22 +02:00
*
2010-02-17 18:50:42 +01:00
* Part of the Settings API . Use this to define new settings sections for an admin page .
* Show settings sections in your admin page callback function with do_settings_sections () .
* Add settings fields to your section with add_settings_field ()
*
2010-06-06 07:16:32 +02:00
* The $callback argument should be the name of a function that echoes out any
2010-02-17 18:50:42 +01:00
* content you want to show at the top of the settings section before the actual
* fields . It can output nothing if you want .
*
2008-10-02 03:03:26 +02:00
* @ since 2.7 . 0
2008-09-10 00:31:22 +02:00
*
2010-02-17 18:50:42 +01:00
* @ global $wp_settings_sections Storage array of all settings sections added to admin pages
2010-06-09 22:21:43 +02:00
*
2010-02-17 18:50:42 +01:00
* @ param string $id Slug - name to identify the section . Used in the 'id' attribute of tags .
2010-03-17 17:27:25 +01:00
* @ param string $title Formatted title of the section . Shown as the heading for the section .
2010-06-09 22:21:43 +02:00
* @ param string $callback Function that echos out any content at the top of the section ( between heading and fields ) .
* @ param string $page The slug - name of the settings page on which to show the section . Built - in pages include 'general' , 'reading' , 'writing' , 'discussion' , 'media' , etc . Create your own using add_options_page ();
2008-09-10 00:31:22 +02:00
*/
function add_settings_section ( $id , $title , $callback , $page ) {
global $wp_settings_sections ;
2010-03-18 18:32:27 +01:00
if ( 'misc' == $page ) {
2012-09-13 19:28:57 +02:00
_deprecated_argument ( __FUNCTION__ , '3.0' , sprintf ( __ ( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) );
2010-03-18 08:50:43 +01:00
$page = 'general' ;
2010-03-18 18:32:27 +01:00
}
2010-03-18 08:50:43 +01:00
2012-09-13 19:28:57 +02:00
if ( 'privacy' == $page ) {
_deprecated_argument ( __FUNCTION__ , '3.5' , sprintf ( __ ( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) );
$page = 'reading' ;
}
2008-09-10 00:31:22 +02:00
$wp_settings_sections [ $page ][ $id ] = array ( 'id' => $id , 'title' => $title , 'callback' => $callback );
}
/**
2010-02-17 18:50:42 +01:00
* Add a new field to a section of a settings page
*
* Part of the Settings API . Use this to define a settings field that will show
* as part of a settings section inside a settings page . The fields are shown using
* do_settings_fields () in do_settings - sections ()
*
* The $callback argument should be the name of a function that echoes out the
2011-09-03 16:18:10 +02:00
* html input tags for this setting field . Use get_option () to retrieve existing
2010-03-17 17:27:25 +01:00
* values to show .
2008-09-10 00:31:22 +02:00
*
2008-10-02 03:03:26 +02:00
* @ since 2.7 . 0
2008-09-10 00:31:22 +02:00
*
2010-02-17 18:50:42 +01:00
* @ global $wp_settings_fields Storage array of settings fields and info about their pages / sections
*
* @ param string $id Slug - name to identify the field . Used in the 'id' attribute of tags .
* @ param string $title Formatted title of the field . Shown as the label for the field during output .
* @ param string $callback Function that fills the field with the desired form inputs . The function should echo its output .
* @ param string $page The slug - name of the settings page on which to show the section ( general , reading , writing , ... ) .
2011-09-03 16:18:10 +02:00
* @ param string $section The slug - name of the section of the settings page in which to show the box ( default , ... ) .
2008-09-10 00:31:22 +02:00
* @ param array $args Additional arguments
*/
function add_settings_field ( $id , $title , $callback , $page , $section = 'default' , $args = array ()) {
global $wp_settings_fields ;
2010-03-18 18:32:27 +01:00
if ( 'misc' == $page ) {
_deprecated_argument ( __FUNCTION__ , '3.0' , __ ( 'The miscellaneous options group has been removed. Use another settings group.' ) );
2010-03-18 08:50:43 +01:00
$page = 'general' ;
2010-03-18 18:32:27 +01:00
}
2010-03-18 08:50:43 +01:00
2012-09-13 19:28:57 +02:00
if ( 'privacy' == $page ) {
_deprecated_argument ( __FUNCTION__ , '3.5' , __ ( 'The privacy options group has been removed. Use another settings group.' ) );
$page = 'reading' ;
}
2008-09-10 00:31:22 +02:00
$wp_settings_fields [ $page ][ $section ][ $id ] = array ( 'id' => $id , 'title' => $title , 'callback' => $callback , 'args' => $args );
}
2008-10-02 03:03:26 +02:00
/**
2010-02-17 18:50:42 +01:00
* Prints out all settings sections added to a particular settings page
2008-10-02 03:03:26 +02:00
*
2010-02-17 18:50:42 +01:00
* Part of the Settings API . Use this in a settings page callback function
* to output all the sections and fields that were added to that $page with
* add_settings_section () and add_settings_field ()
*
* @ global $wp_settings_sections Storage array of all settings sections added to admin pages
* @ global $wp_settings_fields Storage array of settings fields and info about their pages / sections
2010-12-01 20:24:38 +01:00
* @ since 2.7 . 0
2008-10-02 03:03:26 +02:00
*
2010-02-17 18:50:42 +01:00
* @ param string $page The slug name of the page whos settings sections you want to output
2008-10-02 03:03:26 +02:00
*/
2012-09-04 22:55:20 +02:00
function do_settings_sections ( $page ) {
2008-09-10 00:31:22 +02:00
global $wp_settings_sections , $wp_settings_fields ;
2013-09-04 21:07:09 +02:00
if ( ! isset ( $wp_settings_sections [ $page ] ) )
2008-09-10 00:31:22 +02:00
return ;
foreach ( ( array ) $wp_settings_sections [ $page ] as $section ) {
2011-07-11 22:22:24 +02:00
if ( $section [ 'title' ] )
echo " <h3> { $section [ 'title' ] } </h3> \n " ;
2012-09-08 06:58:34 +02:00
2012-09-04 22:55:20 +02:00
if ( $section [ 'callback' ] )
call_user_func ( $section [ 'callback' ], $section );
2012-09-08 06:58:34 +02:00
2012-09-04 22:55:20 +02:00
if ( ! isset ( $wp_settings_fields ) || ! isset ( $wp_settings_fields [ $page ] ) || ! isset ( $wp_settings_fields [ $page ][ $section [ 'id' ]] ) )
2008-09-10 00:31:22 +02:00
continue ;
echo '<table class="form-table">' ;
2012-09-04 22:55:20 +02:00
do_settings_fields ( $page , $section [ 'id' ] );
2008-09-10 00:31:22 +02:00
echo '</table>' ;
}
}
2008-10-02 03:03:26 +02:00
/**
2010-02-17 18:50:42 +01:00
* Print out the settings fields for a particular settings section
*
* Part of the Settings API . Use this in a settings page to output
* a specific section . Should normally be called by do_settings_sections ()
* rather than directly .
*
* @ global $wp_settings_fields Storage array of settings fields and their pages / sections
2008-10-02 03:03:26 +02:00
*
2010-12-01 20:24:38 +01:00
* @ since 2.7 . 0
2008-10-02 03:03:26 +02:00
*
2010-02-17 18:50:42 +01:00
* @ param string $page Slug title of the admin page who ' s settings fields you want to show .
* @ param section $section Slug title of the settings section who ' s fields you want to show .
2008-10-02 03:03:26 +02:00
*/
2008-09-10 00:31:22 +02:00
function do_settings_fields ( $page , $section ) {
global $wp_settings_fields ;
2013-09-04 21:07:09 +02:00
if ( ! isset ( $wp_settings_fields [ $page ][ $section ] ) )
2008-09-10 00:31:22 +02:00
return ;
foreach ( ( array ) $wp_settings_fields [ $page ][ $section ] as $field ) {
2014-01-24 20:06:15 +01:00
echo '<tr>' ;
2008-09-10 00:31:22 +02:00
if ( ! empty ( $field [ 'args' ][ 'label_for' ]) )
2012-11-05 19:04:50 +01:00
echo '<th scope="row"><label for="' . esc_attr ( $field [ 'args' ][ 'label_for' ] ) . '">' . $field [ 'title' ] . '</label></th>' ;
2008-09-10 00:31:22 +02:00
else
echo '<th scope="row">' . $field [ 'title' ] . '</th>' ;
echo '<td>' ;
2009-11-19 18:37:50 +01:00
call_user_func ( $field [ 'callback' ], $field [ 'args' ]);
2008-09-10 00:31:22 +02:00
echo '</td>' ;
echo '</tr>' ;
2008-09-21 21:45:45 +02:00
}
2008-09-10 00:31:22 +02:00
}
2010-02-17 18:50:42 +01:00
/**
* Register a settings error to be displayed to the user
*
* Part of the Settings API . Use this to show messages to users about settings validation
* problems , missing settings or anything else .
*
* Settings errors should be added inside the $sanitize_callback function defined in
* register_setting () for a given setting to give feedback about the submission .
*
* By default messages will show immediately after the submission that generated the error .
* Additional calls to settings_errors () can be used to show errors even when the settings
* page is first accessed .
*
2010-12-01 20:24:38 +01:00
* @ since 3.0 . 0
*
2010-02-17 18:50:42 +01:00
* @ global array $wp_settings_errors Storage array of errors registered during this pageload
2010-03-17 17:27:25 +01:00
*
2010-02-17 18:50:42 +01:00
* @ param string $setting Slug title of the setting to which this error applies
2010-02-18 20:43:44 +01:00
* @ param string $code Slug - name to identify the error . Used as part of 'id' attribute in HTML output .
2010-02-17 18:50:42 +01:00
* @ param string $message The formatted message text to display to the user ( will be shown inside styled < div > and < p > )
* @ param string $type The type of message it is , controls HTML class . Use 'error' or 'updated' .
*/
2010-02-18 20:43:44 +01:00
function add_settings_error ( $setting , $code , $message , $type = 'error' ) {
2010-02-17 18:50:42 +01:00
global $wp_settings_errors ;
$new_error = array (
'setting' => $setting ,
2010-02-18 20:43:44 +01:00
'code' => $code ,
2010-02-17 18:50:42 +01:00
'message' => $message ,
'type' => $type
);
$wp_settings_errors [] = $new_error ;
}
/**
* Fetch settings errors registered by add_settings_error ()
*
* Checks the $wp_settings_errors array for any errors declared during the current
* pageload and returns them .
*
2010-12-03 11:59:20 +01:00
* If changes were just submitted ( $_GET [ 'settings-updated' ]) and settings errors were saved
2010-02-17 18:50:42 +01:00
* to the 'settings_errors' transient then those errors will be returned instead . This
* is used to pass errors back across pageloads .
*
* Use the $sanitize argument to manually re - sanitize the option before returning errors .
* This is useful if you have errors or notices you want to show even when the user
* hasn ' t submitted data ( i . e . when they first load an options page , or in admin_notices action hook )
*
2010-12-01 20:24:38 +01:00
* @ since 3.0 . 0
*
2010-02-17 18:50:42 +01:00
* @ global array $wp_settings_errors Storage array of errors registered during this pageload
*
* @ param string $setting Optional slug title of a specific setting who ' s errors you want .
* @ param boolean $sanitize Whether to re - sanitize the setting value before returning errors .
* @ return array Array of settings errors
*/
2012-01-05 21:50:54 +01:00
function get_settings_errors ( $setting = '' , $sanitize = false ) {
2010-02-17 18:50:42 +01:00
global $wp_settings_errors ;
2013-08-23 00:01:08 +02:00
// If $sanitize is true, manually re-run the sanitization for this option
2010-02-17 18:50:42 +01:00
// This allows the $sanitize_callback from register_setting() to run, adding
// any settings errors you want to show by default.
if ( $sanitize )
2012-07-24 17:13:46 +02:00
sanitize_option ( $setting , get_option ( $setting ) );
2010-02-17 18:50:42 +01:00
// If settings were passed back from options.php then use them
2012-07-24 17:13:46 +02:00
if ( isset ( $_GET [ 'settings-updated' ] ) && $_GET [ 'settings-updated' ] && get_transient ( 'settings_errors' ) ) {
$wp_settings_errors = array_merge ( ( array ) $wp_settings_errors , get_transient ( 'settings_errors' ) );
delete_transient ( 'settings_errors' );
}
// Check global in case errors have been added on this pageload
2012-07-26 17:01:44 +02:00
if ( ! count ( $wp_settings_errors ) )
2012-07-24 17:13:46 +02:00
return array ();
2010-02-17 18:50:42 +01:00
// Filter the results to those of a specific setting if one was set
if ( $setting ) {
2012-10-01 18:09:16 +02:00
$setting_errors = array ();
2012-07-24 17:13:46 +02:00
foreach ( ( array ) $wp_settings_errors as $key => $details ) {
if ( $setting == $details [ 'setting' ] )
$setting_errors [] = $wp_settings_errors [ $key ];
}
return $setting_errors ;
2010-02-17 18:50:42 +01:00
}
2012-07-24 17:13:46 +02:00
return $wp_settings_errors ;
2010-02-17 18:50:42 +01:00
}
/**
* Display settings errors registered by add_settings_error ()
*
* Part of the Settings API . Outputs a < div > for each error retrieved by get_settings_errors () .
2010-03-17 17:27:25 +01:00
*
2010-02-17 18:50:42 +01:00
* This is called automatically after a settings page based on the Settings API is submitted .
* Errors should be added during the validation callback function for a setting defined in register_setting ()
*
* The $sanitize option is passed into get_settings_errors () and will re - run the setting sanitization
* on its current value .
*
* The $hide_on_update option will cause errors to only show when the settings page is first loaded .
* if the user has already saved new values it will be hidden to avoid repeating messages already
* shown in the default error reporting after submission . This is useful to show general errors like missing
* settings when the user arrives at the settings page .
*
2010-12-01 20:24:38 +01:00
* @ since 3.0 . 0
*
2010-02-17 18:50:42 +01:00
* @ param string $setting Optional slug title of a specific setting who ' s errors you want .
* @ param boolean $sanitize Whether to re - sanitize the setting value before returning errors .
* @ param boolean $hide_on_update If set to true errors will not be shown if the settings page has already been submitted .
*/
2012-01-05 21:50:54 +01:00
function settings_errors ( $setting = '' , $sanitize = false , $hide_on_update = false ) {
2010-02-17 18:50:42 +01:00
2012-01-13 19:15:55 +01:00
if ( $hide_on_update && ! empty ( $_GET [ 'settings-updated' ] ) )
return ;
2010-02-23 00:12:48 +01:00
2010-02-17 18:50:42 +01:00
$settings_errors = get_settings_errors ( $setting , $sanitize );
2012-07-24 17:13:46 +02:00
if ( empty ( $settings_errors ) )
2012-01-13 19:15:55 +01:00
return ;
2010-02-17 18:50:42 +01:00
2010-08-11 23:54:51 +02:00
$output = '' ;
2010-02-17 18:50:42 +01:00
foreach ( $settings_errors as $key => $details ) {
2010-02-18 20:43:44 +01:00
$css_id = 'setting-error-' . $details [ 'code' ];
2010-04-08 05:36:52 +02:00
$css_class = $details [ 'type' ] . ' settings-error' ;
2010-08-11 23:54:51 +02:00
$output .= " <div id=' $css_id ' class=' $css_class '> \n " ;
$output .= " <p><strong> { $details [ 'message' ] } </strong></p> " ;
$output .= " </div> \n " ;
2010-02-17 18:50:42 +01:00
}
2010-08-11 23:54:51 +02:00
echo $output ;
2010-02-17 18:50:42 +01:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
2010-12-01 20:24:38 +01:00
* @ since 2.7 . 0
2008-10-02 03:03:26 +02:00
*
* @ param unknown_type $found_action
*/
2008-09-16 06:24:28 +02:00
function find_posts_div ( $found_action = '' ) {
?>
2014-03-05 00:11:13 +01:00
< div id = " find-posts " class = " find-box " style = " display: none; " >
< div id = " find-posts-head " class = " find-box-head " >
< ? php _e ( 'Find Posts or Pages' ); ?>
< div id = " find-posts-close " ></ div >
</ div >
2008-09-16 06:24:28 +02:00
< div class = " find-box-inside " >
< div class = " find-box-search " >
< ? php if ( $found_action ) { ?>
2009-05-05 21:43:53 +02:00
< input type = " hidden " name = " found_action " value = " <?php echo esc_attr( $found_action ); ?> " />
2008-09-16 06:24:28 +02:00
< ? php } ?>
< input type = " hidden " name = " affected " id = " affected " value = " " />
< ? php wp_nonce_field ( 'find-posts' , '_ajax_nonce' , false ); ?>
2009-05-13 00:40:56 +02:00
< label class = " screen-reader-text " for = " find-posts-input " >< ? php _e ( 'Search' ); ?> </label>
2009-04-16 06:41:05 +02:00
< input type = " text " id = " find-posts-input " name = " ps " value = " " />
2012-11-20 19:50:15 +01:00
< span class = " spinner " ></ span >
< input type = " button " id = " find-posts-search " value = " <?php esc_attr_e( 'Search' ); ?> " class = " button " />
2014-03-05 00:11:13 +01:00
< div class = " clear " ></ div >
2008-09-16 06:24:28 +02:00
</ div >
< div id = " find-posts-response " ></ div >
</ div >
< div class = " find-box-buttons " >
2010-10-28 23:56:43 +02:00
< ? php submit_button ( __ ( 'Select' ), 'button-primary alignright' , 'find-posts-submit' , false ); ?>
2014-03-05 00:11:13 +01:00
< div class = " clear " ></ div >
2008-09-16 06:24:28 +02:00
</ div >
</ div >
< ? php
}
2008-09-21 23:10:14 +02:00
/**
* Display the post password .
2008-10-08 03:18:16 +02:00
*
2009-05-05 21:43:53 +02:00
* The password is passed through { @ link esc_attr ()} to ensure that it
2008-10-02 03:03:26 +02:00
* is safe for placing in an html attribute .
2008-09-21 23:10:14 +02:00
*
2009-04-28 07:58:45 +02:00
* @ uses attr
2008-09-21 23:10:14 +02:00
* @ since 2.7 . 0
*/
function the_post_password () {
2012-09-04 18:29:28 +02:00
$post = get_post ();
if ( isset ( $post -> post_password ) )
echo esc_attr ( $post -> post_password );
2008-09-21 23:10:14 +02:00
}
2008-09-26 01:49:24 +02:00
2008-09-30 23:32:13 +02:00
/**
* Get the post title .
2008-10-08 03:18:16 +02:00
*
2008-10-02 03:03:26 +02:00
* The post title is fetched and if it is blank then a default string is
* returned .
2008-09-30 23:32:13 +02:00
*
* @ since 2.7 . 0
2012-09-04 18:29:28 +02:00
* @ param mixed $post Post id or object . If not supplied the global $post is used .
2010-09-07 13:21:11 +02:00
* @ return string The post title if set
2008-09-30 23:32:13 +02:00
*/
2012-09-04 18:29:28 +02:00
function _draft_or_post_title ( $post = 0 ) {
$title = get_the_title ( $post );
if ( empty ( $title ) )
$title = __ ( '(no title)' );
2008-09-30 23:32:13 +02:00
return $title ;
}
2008-10-02 03:03:26 +02:00
2008-10-03 05:06:43 +02:00
/**
* Display the search query .
2008-10-08 03:18:16 +02:00
*
2008-10-03 05:06:43 +02:00
* A simple wrapper to display the " s " parameter in a GET URI . This function
* should only be used when { @ link the_search_query ()} cannot .
*
2009-04-28 07:58:45 +02:00
* @ uses attr
2008-10-03 05:06:43 +02:00
* @ since 2.7 . 0
2008-10-08 03:18:16 +02:00
*
2008-10-03 05:06:43 +02:00
*/
function _admin_search_query () {
2013-03-01 18:14:09 +01:00
echo isset ( $_REQUEST [ 's' ]) ? esc_attr ( wp_unslash ( $_REQUEST [ 's' ] ) ) : '' ;
2008-10-14 01:39:56 +02:00
}
/**
* Generic Iframe header for use with Thickbox
*
* @ since 2.7 . 0
* @ param string $title Title of the Iframe page .
* @ param bool $limit_styles Limit styles to colour - related styles only ( unless others are enqueued ) .
*
*/
2009-05-16 21:21:29 +02:00
function iframe_header ( $title = '' , $limit_styles = false ) {
2010-10-23 21:49:25 +02:00
show_admin_bar ( false );
2011-10-23 20:01:33 +02:00
global $hook_suffix , $current_user , $admin_body_class , $wp_locale ;
2010-12-12 06:43:35 +01:00
$admin_body_class = preg_replace ( '/[^a-z0-9_-]+/i' , '-' , $hook_suffix );
2010-12-13 22:21:50 +01:00
2011-10-23 20:01:33 +02:00
$current_screen = get_current_screen ();
2012-08-17 16:19:03 +02:00
@ header ( 'Content-Type: ' . get_option ( 'html_type' ) . '; charset=' . get_option ( 'blog_charset' ) );
2011-10-17 22:57:32 +02:00
_wp_admin_html_begin ();
?>
2010-08-11 23:54:51 +02:00
< title >< ? php bloginfo ( 'name' ) ?> › <?php echo $title ?> — <?php _e('WordPress'); ?></title>
2008-10-14 01:39:56 +02:00
< ? php
2010-08-11 23:54:51 +02:00
wp_enqueue_style ( 'colors' );
2008-10-14 01:39:56 +02:00
?>
< script type = " text/javascript " >
//<![CDATA[
2009-03-20 01:14:57 +01:00
addLoadEvent = function ( func ){ if ( typeof jQuery != " undefined " ) jQuery ( document ) . ready ( func ); else if ( typeof wpOnload != 'function' ){ wpOnload = func ;} else { var oldonload = wpOnload ; wpOnload = function (){ oldonload (); func ();}}};
function tb_close (){ var win = window . dialogArguments || opener || parent || top ; win . tb_remove ();}
2013-05-07 17:49:20 +02:00
var ajaxurl = '<?php echo admin_url( ' admin - ajax . php ', ' relative ' ); ?>' ,
2010-12-12 06:43:35 +01:00
pagenow = '<?php echo $current_screen->id; ?>' ,
2011-11-17 19:01:08 +01:00
typenow = '<?php echo $current_screen->post_type; ?>' ,
2010-12-12 06:43:35 +01:00
adminpage = '<?php echo $admin_body_class; ?>' ,
thousandsSeparator = '<?php echo addslashes( $wp_locale->number_format[' thousands_sep '] ); ?>' ,
decimalPoint = '<?php echo addslashes( $wp_locale->number_format[' decimal_point '] ); ?>' ,
isRtl = < ? php echo ( int ) is_rtl (); ?> ;
2008-10-14 01:39:56 +02:00
//]]>
</ script >
< ? php
2014-02-23 23:44:13 +01:00
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_enqueue_scripts' , $hook_suffix );
/** This action is documented in wp-admin/admin-header.php */
do_action ( " admin_print_styles- $hook_suffix " );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_print_styles' );
/** This action is documented in wp-admin/admin-header.php */
do_action ( " admin_print_scripts- $hook_suffix " );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_print_scripts' );
/** This action is documented in wp-admin/admin-header.php */
do_action ( " admin_head- $hook_suffix " );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_head' );
2012-02-04 01:54:42 +01:00
$admin_body_class .= ' locale-' . sanitize_html_class ( strtolower ( str_replace ( '_' , '-' , get_locale () ) ) );
2013-08-06 19:35:43 +02:00
if ( is_rtl () )
$admin_body_class .= ' rtl' ;
2008-10-14 01:39:56 +02:00
?>
</ head >
2014-03-25 09:05:15 +01:00
< ? php /** This filter is documented in wp-admin/admin-header.php */ ?>
2012-11-30 14:40:59 +01:00
< body < ? php if ( isset ( $GLOBALS [ 'body_id' ]) ) echo ' id="' . $GLOBALS [ 'body_id' ] . '"' ; ?> class="wp-admin wp-core-ui no-js iframe <?php echo apply_filters( 'admin_body_class', '' ) . ' ' . $admin_body_class; ?>">
2010-04-17 14:27:13 +02:00
< script type = " text/javascript " >
//<![CDATA[
( function (){
var c = document . body . className ;
c = c . replace ( / no - js / , 'js' );
document . body . className = c ;
})();
//]]>
</ script >
2008-10-14 01:39:56 +02:00
< ? php
}
/**
* Generic Iframe footer for use with Thickbox
*
* @ since 2.7 . 0
*
*/
function iframe_footer () {
2014-02-23 23:44:13 +01:00
/*
* We ' re going to hide any footer output on iFrame pages ,
* but run the hooks anyway since they output Javascript
* or other needed content .
*/
?>
2009-05-16 21:21:29 +02:00
< div class = " hidden " >
< ? php
2014-02-23 23:44:13 +01:00
/** This action is documented in wp-admin/admin-footer.php */
do_action ( 'admin_footer' , '' );
/** This action is documented in wp-admin/admin-footer.php */
do_action ( 'admin_print_footer_scripts' );
?>
2009-05-16 21:21:29 +02:00
</ div >
< script type = " text/javascript " > if ( typeof wpOnload == " function " ) wpOnload (); </ script >
</ body >
</ html >
< ? php
2008-10-03 05:06:43 +02:00
}
2008-10-14 05:49:57 +02:00
function _post_states ( $post ) {
$post_states = array ();
2011-11-15 04:51:28 +01:00
if ( isset ( $_REQUEST [ 'post_status' ] ) )
$post_status = $_REQUEST [ 'post_status' ];
2008-10-14 05:49:57 +02:00
else
$post_status = '' ;
if ( ! empty ( $post -> post_password ) )
2011-03-23 19:57:12 +01:00
$post_states [ 'protected' ] = __ ( 'Password protected' );
2008-10-14 05:49:57 +02:00
if ( 'private' == $post -> post_status && 'private' != $post_status )
2011-03-23 19:57:12 +01:00
$post_states [ 'private' ] = __ ( 'Private' );
2008-10-14 05:49:57 +02:00
if ( 'draft' == $post -> post_status && 'draft' != $post_status )
2011-03-23 19:57:12 +01:00
$post_states [ 'draft' ] = __ ( 'Draft' );
2008-10-14 05:49:57 +02:00
if ( 'pending' == $post -> post_status && 'pending' != $post_status )
2009-03-02 20:20:19 +01:00
/* translators: post state */
2011-03-23 19:57:12 +01:00
$post_states [ 'pending' ] = _x ( 'Pending' , 'post state' );
2009-02-17 20:13:31 +01:00
if ( is_sticky ( $post -> ID ) )
2011-03-23 19:57:12 +01:00
$post_states [ 'sticky' ] = __ ( 'Sticky' );
2008-10-14 05:49:57 +02:00
2014-02-23 23:44:13 +01:00
/**
* Filter the default post display states used in the Posts list table .
*
* @ since 2.8 . 0
*
* @ param array $post_states An array of post display states . Values include 'Password protected' ,
* 'Private' , 'Draft' , 'Pending' , and 'Sticky' .
* @ param int $post The post ID .
*/
2013-04-18 17:02:30 +02:00
$post_states = apply_filters ( 'display_post_states' , $post_states , $post );
2009-02-04 17:52:36 +01:00
2008-10-14 05:49:57 +02:00
if ( ! empty ( $post_states ) ) {
$state_count = count ( $post_states );
$i = 0 ;
2008-10-14 08:07:49 +02:00
echo ' - ' ;
2008-10-14 05:49:57 +02:00
foreach ( $post_states as $state ) {
++ $i ;
( $i == $state_count ) ? $sep = '' : $sep = ', ' ;
echo " <span class='post-state'> $state $sep </span> " ;
}
}
2010-12-31 05:49:27 +01:00
2008-10-14 05:49:57 +02:00
}
2011-05-04 20:28:31 +02:00
function _media_states ( $post ) {
$media_states = array ();
$stylesheet = get_option ( 'stylesheet' );
if ( current_theme_supports ( 'custom-header' ) ) {
$meta_header = get_post_meta ( $post -> ID , '_wp_attachment_is_custom_header' , true );
if ( ! empty ( $meta_header ) && $meta_header == $stylesheet )
$media_states [] = __ ( 'Header Image' );
}
if ( current_theme_supports ( 'custom-background' ) ) {
$meta_background = get_post_meta ( $post -> ID , '_wp_attachment_is_custom_background' , true );
if ( ! empty ( $meta_background ) && $meta_background == $stylesheet )
$media_states [] = __ ( 'Background Image' );
}
2014-02-23 23:44:13 +01:00
/**
* Filter the default media display states for items in the Media list table .
*
* @ since 3.2 . 0
*
* @ param array $media_states An array of media states . Default 'Header Image' ,
* 'Background Image' .
*/
2011-05-04 20:28:31 +02:00
$media_states = apply_filters ( 'display_media_states' , $media_states );
if ( ! empty ( $media_states ) ) {
$state_count = count ( $media_states );
$i = 0 ;
echo ' - ' ;
foreach ( $media_states as $state ) {
++ $i ;
( $i == $state_count ) ? $sep = '' : $sep = ', ' ;
echo " <span class='post-state'> $state $sep </span> " ;
}
}
}
2009-01-14 15:18:51 +01:00
/**
2009-01-26 13:59:10 +01:00
* Test support for compressing JavaScript from PHP
2009-01-14 15:18:51 +01:00
*
* Outputs JavaScript that tests if compression from PHP works as expected
* and sets an option with the result . Has no effect when the current user
* is not an administrator . To run the test again the option 'can_compress_scripts'
2009-02-01 10:45:24 +01:00
* has to be deleted .
2009-01-14 15:18:51 +01:00
*
* @ since 2.8 . 0
*/
function compression_test () {
?>
< script type = " text/javascript " >
/* <![CDATA[ */
2009-02-01 10:45:24 +01:00
var testCompression = {
get : function ( test ) {
var x ;
if ( window . XMLHttpRequest ) {
x = new XMLHttpRequest ();
} else {
try { x = new ActiveXObject ( 'Msxml2.XMLHTTP' );} catch ( e ){ try { x = new ActiveXObject ( 'Microsoft.XMLHTTP' );} catch ( e ){};}
}
if ( x ) {
x . onreadystatechange = function () {
var r , h ;
if ( x . readyState == 4 ) {
r = x . responseText . substr ( 0 , 18 );
h = x . getResponseHeader ( 'Content-Encoding' );
testCompression . check ( r , h , test );
}
}
2010-12-02 15:15:25 +01:00
x . open ( 'GET' , ajaxurl + '?action=wp-compression-test&test=' + test + '&' + ( new Date ()) . getTime (), true );
2009-02-01 10:45:24 +01:00
x . send ( '' );
}
},
check : function ( r , h , test ) {
if ( ! r && ! test )
this . get ( 1 );
if ( 1 == test ) {
if ( h && ( h . match ( / deflate / i ) || h . match ( / gzip / i ) ) )
this . get ( 'no' );
else
this . get ( 2 );
return ;
}
if ( 2 == test ) {
if ( '"wpCompressionTest' == r )
this . get ( 'yes' );
else
this . get ( 'no' );
}
2009-01-14 15:18:51 +01:00
}
2009-02-01 10:45:24 +01:00
};
testCompression . check ();
2009-01-14 15:18:51 +01:00
/* ]]> */
</ script >
< ? php
}
2010-10-14 21:58:06 +02:00
/**
2014-02-08 23:14:12 +01:00
* Echoes a submit button , with provided text and appropriate class ( es ) .
2010-10-14 21:58:06 +02:00
*
* @ since 3.1 . 0
*
2014-02-08 23:14:12 +01:00
* @ see get_submit_button ()
*
* @ param string $text The text of the button ( defaults to 'Save Changes' )
2014-02-08 23:19:11 +01:00
* @ param string $type Optional . The type and CSS class ( es ) of the button . Core values
* include 'primary' , 'secondary' , 'delete' . Default 'primary'
2014-02-08 23:14:12 +01:00
* @ param string $name The HTML name of the submit button . Defaults to " submit " . If no
* id attribute is given in $other_attributes below , $name will be
* used as the button ' s id .
* @ param bool $wrap True if the output button should be wrapped in a paragraph tag ,
* false otherwise . Defaults to true
* @ param array | string $other_attributes Other attributes that should be output with the button , mapping
* attributes to their values , such as setting tabindex to 1 , etc .
* These key / value attribute pairs will be output as attribute = " value " ,
* where attribute is the key . Other attributes can also be provided
* as a string such as 'tabindex="1"' , though the array format is
* preferred . Default null .
2010-10-14 21:58:06 +02:00
*/
2012-01-05 21:50:54 +01:00
function submit_button ( $text = null , $type = 'primary' , $name = 'submit' , $wrap = true , $other_attributes = null ) {
2010-10-28 23:56:43 +02:00
echo get_submit_button ( $text , $type , $name , $wrap , $other_attributes );
2010-10-14 21:58:06 +02:00
}
/**
2010-10-28 23:56:43 +02:00
* Returns a submit button , with provided text and appropriate class
2010-10-14 21:58:06 +02:00
*
* @ since 3.1 . 0
*
* @ param string $text The text of the button ( defaults to 'Save Changes' )
* @ param string $type The type of button . One of : primary , secondary , delete
2010-10-28 23:56:43 +02:00
* @ param string $name The HTML name of the submit button . Defaults to " submit " . If no id attribute
* is given in $other_attributes below , $name will be used as the button ' s id .
* @ param bool $wrap True if the output button should be wrapped in a paragraph tag ,
* false otherwise . Defaults to true
* @ param array | string $other_attributes Other attributes that should be output with the button ,
* mapping attributes to their values , such as array ( 'tabindex' => '1' ) .
2011-09-03 16:18:10 +02:00
* These attributes will be output as attribute = " value " , such as tabindex = " 1 " .
2010-10-28 23:56:43 +02:00
* Defaults to no other attributes . Other attributes can also be provided as a
* string such as 'tabindex="1"' , though the array format is typically cleaner .
2010-10-14 21:58:06 +02:00
*/
2012-10-03 01:38:21 +02:00
function get_submit_button ( $text = null , $type = 'primary large' , $name = 'submit' , $wrap = true , $other_attributes = null ) {
2012-09-08 06:58:34 +02:00
if ( ! is_array ( $type ) )
2012-10-03 01:38:21 +02:00
$type = explode ( ' ' , $type );
2012-09-08 06:58:34 +02:00
2012-09-21 21:34:23 +02:00
$button_shorthand = array ( 'primary' , 'small' , 'large' );
2012-09-08 06:58:34 +02:00
$classes = array ( 'button' );
foreach ( $type as $t ) {
if ( 'secondary' === $t || 'button-secondary' === $t )
continue ;
$classes [] = in_array ( $t , $button_shorthand ) ? 'button-' . $t : $t ;
}
$class = implode ( ' ' , array_unique ( $classes ) );
if ( 'delete' === $type )
$class = 'button-secondary delete' ;
$text = $text ? $text : __ ( 'Save Changes' );
2010-11-17 19:47:34 +01:00
2010-11-24 17:30:40 +01:00
// Default the id attribute to $name unless an id was specifically provided in $other_attributes
$id = $name ;
if ( is_array ( $other_attributes ) && isset ( $other_attributes [ 'id' ] ) ) {
$id = $other_attributes [ 'id' ];
unset ( $other_attributes [ 'id' ] );
}
2010-10-28 23:56:43 +02:00
$attributes = '' ;
if ( is_array ( $other_attributes ) ) {
foreach ( $other_attributes as $attribute => $value ) {
$attributes .= $attribute . '="' . esc_attr ( $value ) . '" ' ; // Trailing space is important
}
} else if ( ! empty ( $other_attributes ) ) { // Attributes provided as a string
$attributes = $other_attributes ;
}
2010-11-17 19:47:34 +01:00
2010-10-30 08:14:15 +02:00
$button = '<input type="submit" name="' . esc_attr ( $name ) . '" id="' . esc_attr ( $id ) . '" class="' . esc_attr ( $class );
2010-10-28 23:56:43 +02:00
$button .= '" value="' . esc_attr ( $text ) . '" ' . $attributes . ' />' ;
2010-11-17 19:47:34 +01:00
2010-10-28 23:56:43 +02:00
if ( $wrap ) {
$button = '<p class="submit">' . $button . '</p>' ;
}
2010-11-17 19:47:34 +01:00
2010-10-28 23:56:43 +02:00
return $button ;
2010-10-14 21:58:06 +02:00
}
2011-09-18 23:17:09 +02:00
2011-10-17 22:57:32 +02:00
function _wp_admin_html_begin () {
2013-11-07 00:49:09 +01:00
global $is_IE ;
2012-06-08 00:05:01 +02:00
$admin_html_class = ( is_admin_bar_showing () ) ? 'wp-toolbar' : '' ;
2013-11-11 19:02:10 +01:00
if ( $is_IE )
@ header ( 'X-UA-Compatible: IE=edge' );
2014-02-23 23:44:13 +01:00
/**
* Fires inside the HTML tag in the admin header .
*
* @ since 2.2 . 0
*/
2011-10-17 22:57:32 +02:00
?>
<! DOCTYPE html >
<!-- [ if IE 8 ] >
2014-02-23 23:44:13 +01:00
< html xmlns = " http://www.w3.org/1999/xhtml " class = " ie8 <?php echo $admin_html_class ; ?> " < ? php do_action ( 'admin_xml_ns' ); ?> <?php language_attributes(); ?>>
2011-10-17 22:57:32 +02:00
<! [ endif ] -->
<!-- [ if ! ( IE 8 ) ] ><!-->
2014-02-23 23:44:13 +01:00
< ? php /** This action is documented in wp-admin/includes/template.php */ ?>
< html xmlns = " http://www.w3.org/1999/xhtml " class = " <?php echo $admin_html_class ; ?> " < ? php do_action ( 'admin_xml_ns' ); ?> <?php language_attributes(); ?>>
2011-10-17 22:57:32 +02:00
<!--<! [ endif ] -->
< head >
< meta http - equiv = " Content-Type " content = " <?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?> " />
< ? php
}
2011-11-21 23:39:48 +01:00
final class WP_Internal_Pointers {
/**
* Initializes the new feature pointers .
*
* @ since 3.3 . 0
*
* All pointers can be disabled using the following :
* remove_action ( 'admin_enqueue_scripts' , array ( 'WP_Internal_Pointers' , 'enqueue_scripts' ) );
*
2014-04-12 22:48:15 +02:00
* Individual pointers ( e . g . wp390_widgets ) can be disabled using the following :
* remove_action ( 'admin_print_footer_scripts' , array ( 'WP_Internal_Pointers' , 'pointer_wp390_widgets' ) );
2011-11-21 23:39:48 +01:00
*/
public static function enqueue_scripts ( $hook_suffix ) {
/*
* Register feature pointers
* Format : array ( hook_suffix => pointer_id )
*/
2011-11-22 22:50:50 +01:00
2011-11-21 23:39:48 +01:00
$registered_pointers = array (
2012-11-22 10:24:11 +01:00
'post-new.php' => 'wp350_media' ,
2013-07-29 08:17:01 +02:00
'post.php' => array ( 'wp350_media' , 'wp360_revisions' ),
'edit.php' => 'wp360_locks' ,
2014-04-12 22:48:15 +02:00
'widgets.php' => 'wp390_widgets' ,
'themes.php' => 'wp390_widgets' ,
2011-11-21 23:39:48 +01:00
);
// Check if screen related pointer is registered
if ( empty ( $registered_pointers [ $hook_suffix ] ) )
return ;
2011-09-18 23:17:09 +02:00
2012-05-11 22:29:08 +02:00
$pointers = ( array ) $registered_pointers [ $hook_suffix ];
2011-10-11 01:31:36 +02:00
2011-11-30 16:59:55 +01:00
$caps_required = array (
2012-11-22 10:24:11 +01:00
'wp350_media' => array ( 'upload_files' ),
2014-04-12 22:53:15 +02:00
'wp390_widgets' => array ( 'edit_theme_options' ),
2011-11-30 16:59:55 +01:00
);
2011-11-21 23:39:48 +01:00
// Get dismissed pointers
$dismissed = explode ( ',' , ( string ) get_user_meta ( get_current_user_id (), 'dismissed_wp_pointers' , true ) );
2012-05-11 22:29:08 +02:00
$got_pointers = false ;
foreach ( array_diff ( $pointers , $dismissed ) as $pointer ) {
if ( isset ( $caps_required [ $pointer ] ) ) {
foreach ( $caps_required [ $pointer ] as $cap ) {
if ( ! current_user_can ( $cap ) )
continue 2 ;
}
}
2011-11-21 23:39:48 +01:00
2012-05-11 22:29:08 +02:00
// Bind pointer print function
add_action ( 'admin_print_footer_scripts' , array ( 'WP_Internal_Pointers' , 'pointer_' . $pointer ) );
$got_pointers = true ;
}
if ( ! $got_pointers )
return ;
2011-09-18 23:17:09 +02:00
2011-11-21 23:39:48 +01:00
// Add pointers script and style to queue
2011-09-18 23:17:09 +02:00
wp_enqueue_style ( 'wp-pointer' );
wp_enqueue_script ( 'wp-pointer' );
}
2011-11-21 23:39:48 +01:00
/**
* Print the pointer javascript data .
*
* @ since 3.3 . 0
*
* @ param string $pointer_id The pointer ID .
* @ param string $selector The HTML elements , on which the pointer should be attached .
2012-08-30 04:15:57 +02:00
* @ param array $args Arguments to be passed to the pointer JS ( see wp - pointer . js ) .
2011-11-21 23:39:48 +01:00
*/
private static function print_js ( $pointer_id , $selector , $args ) {
if ( empty ( $pointer_id ) || empty ( $selector ) || empty ( $args ) || empty ( $args [ 'content' ] ) )
return ;
2011-09-18 23:17:09 +02:00
2011-11-21 23:39:48 +01:00
?>
< script type = " text/javascript " >
//<![CDATA[
2012-05-24 08:45:49 +02:00
( function ( $ ){
var options = < ? php echo json_encode ( $args ); ?> , setup;
2011-11-21 23:39:48 +01:00
if ( ! options )
return ;
options = $ . extend ( options , {
close : function () {
$ . post ( ajaxurl , {
pointer : '<?php echo $pointer_id; ?>' ,
action : 'dismiss-wp-pointer'
});
}
2011-10-11 01:31:36 +02:00
});
2011-11-21 23:39:48 +01:00
2012-05-24 08:45:49 +02:00
setup = function () {
2013-08-25 00:34:10 +02:00
$ ( '<?php echo $selector; ?>' ) . first () . pointer ( options ) . pointer ( 'open' );
2012-05-24 08:45:49 +02:00
};
2012-05-25 00:50:30 +02:00
if ( options . position && options . position . defer_loading )
2012-05-24 08:45:49 +02:00
$ ( window ) . bind ( 'load.wp-pointers' , setup );
else
$ ( document ) . ready ( setup );
})( jQuery );
2011-11-21 23:39:48 +01:00
//]]>
</ script >
< ? php
}
2014-04-12 22:48:15 +02:00
public static function pointer_wp330_toolbar () {}
2012-11-22 10:24:11 +01:00
public static function pointer_wp330_media_uploader () {}
2014-04-12 22:48:15 +02:00
public static function pointer_wp330_saving_widgets () {}
public static function pointer_wp340_customize_current_theme_link () {}
public static function pointer_wp340_choose_image_from_library () {}
2012-05-21 22:34:20 +02:00
2012-11-22 10:24:11 +01:00
public static function pointer_wp350_media () {
2012-11-27 19:58:07 +01:00
$content = '<h3>' . __ ( 'New Media Manager' ) . '</h3>' ;
$content .= '<p>' . __ ( 'Uploading files and creating image galleries has a whole new look. Check it out!' ) . '</p>' ;
2012-11-22 10:24:11 +01:00
self :: print_js ( 'wp350_media' , '.insert-media' , array (
'content' => $content ,
'position' => array ( 'edge' => is_rtl () ? 'right' : 'left' , 'align' => 'center' ),
) );
}
2013-07-29 08:17:01 +02:00
public static function pointer_wp360_revisions () {
$content = '<h3>' . __ ( 'Compare Revisions' ) . '</h3>' ;
$content .= '<p>' . __ ( 'View, compare, and restore other versions of this content on the improved revisions screen.' ) . '</p>' ;
2013-08-22 17:24:10 +02:00
self :: print_js ( 'wp360_revisions' , '.misc-pub-section.misc-pub-revisions' , array (
2013-07-29 08:17:01 +02:00
'content' => $content ,
'position' => array ( 'edge' => is_rtl () ? 'left' : 'right' , 'align' => 'center' , 'my' => is_rtl () ? 'left' : 'right-14px' ),
) );
}
public static function pointer_wp360_locks () {
2014-04-12 22:48:15 +02:00
if ( ! is_multi_author () ) {
return ;
}
2013-07-29 08:17:01 +02:00
$content = '<h3>' . __ ( 'Edit Lock' ) . '</h3>' ;
$content .= '<p>' . __ ( 'Someone else is editing this. No need to refresh; the lock will disappear when they’re done.' ) . '</p>' ;
self :: print_js ( 'wp360_locks' , 'tr.wp-locked .locked-indicator' , array (
'content' => $content ,
'position' => array ( 'edge' => 'left' , 'align' => 'left' ),
) );
}
2014-04-12 22:48:15 +02:00
public static function pointer_wp390_widgets () {
if ( ! current_theme_supports ( 'widgets' ) ) {
return ;
}
$content = '<h3>' . __ ( 'New Feature: Live Widget Previews' ) . '</h3>' ;
$content .= '<p>' . __ ( 'Add, edit, and play around with your widgets from the theme customizer.' ) . ' ' . __ ( 'Preview your changes in real-time and only save them when you’re ready.' ) . '</p>' ;
if ( 'themes' === get_current_screen () -> id ) {
$selector = '.theme.active .customize' ;
2014-04-14 02:00:14 +02:00
$position = array ( 'edge' => is_rtl () ? 'right' : 'left' , 'align' => 'center' , 'my' => is_rtl () ? 'right-13px' : '' );
2014-04-12 22:48:15 +02:00
} else {
$selector = 'a[href="customize.php"]' ;
if ( is_rtl () ) {
2014-04-14 02:00:14 +02:00
$position = array ( 'edge' => 'right' , 'align' => 'center' , 'my' => 'right-5px' );
2014-04-12 22:48:15 +02:00
} else {
2014-04-14 02:00:14 +02:00
$position = array ( 'edge' => 'left' , 'align' => 'center' , 'my' => 'left-5px' );
2014-04-12 22:48:15 +02:00
}
}
self :: print_js ( 'wp390_widgets' , $selector , array (
'content' => $content ,
'position' => $position ,
) );
}
2011-11-30 17:05:59 +01:00
/**
* Prevents new users from seeing existing 'new feature' pointers .
*
* @ since 3.3 . 0
*/
public static function dismiss_pointers_for_new_users ( $user_id ) {
2014-04-12 22:48:15 +02:00
add_user_meta ( $user_id , 'dismissed_wp_pointers' , 'wp350_media,wp360_revisions,wp360_locks,wp390_widgets' );
2011-11-30 17:05:59 +01:00
}
2011-10-01 22:50:08 +02:00
}
2011-11-21 23:39:48 +01:00
2011-11-30 17:05:59 +01:00
add_action ( 'admin_enqueue_scripts' , array ( 'WP_Internal_Pointers' , 'enqueue_scripts' ) );
2011-12-08 22:55:39 +01:00
add_action ( 'user_register' , array ( 'WP_Internal_Pointers' , 'dismiss_pointers_for_new_users' ) );
2011-11-23 22:29:33 +01:00
/**
* Convert a screen string to a screen object
*
* @ since 3.0 . 0
*
* @ param string $hook_name The hook name ( also known as the hook suffix ) used to determine the screen .
* @ return WP_Screen Screen object .
*/
function convert_to_screen ( $hook_name ) {
2011-11-25 06:15:28 +01:00
if ( ! class_exists ( 'WP_Screen' ) ) {
2011-11-23 22:29:33 +01:00
_doing_it_wrong ( 'convert_to_screen(), add_meta_box()' , __ ( " Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead. " ), '3.3' );
return ( object ) array ( 'id' => '_invalid' , 'base' => '_are_belong_to_us' );
}
return WP_Screen :: get ( $hook_name );
2012-01-13 19:15:55 +01:00
}
2013-07-22 07:09:49 +02:00
/**
* Output the HTML for restoring the post data from DOM storage
*
2013-12-24 19:57:12 +01:00
* @ since 3.6 . 0
2013-07-22 07:09:49 +02:00
* @ access private
*/
function _local_storage_notice () {
?>
< div id = " local-storage-notice " class = " hidden " >
< p class = " local-restore " >
< ? php _e ( 'The backup of this post in your browser is different from the version below.' ); ?>
< a class = " restore-backup " href = " # " >< ? php _e ( 'Restore the backup.' ); ?> </a>
</ p >
< p class = " undo-restore hidden " >
< ? php _e ( 'Post restored successfully.' ); ?>
< a class = " undo-restore-backup " href = " # " >< ? php _e ( 'Undo.' ); ?> </a>
</ p >
</ div >
< ? php
}
2013-11-26 03:25:21 +01:00
/**
* Output a HTML element with a star rating for a given rating .
*
* Outputs a HTML element with the star rating exposed on a 0. . 5 scale in
* half star increments ( ie . 1 , 1.5 , 2 stars ) . Optionally , if specified , the
* number of ratings may also be displayed by passing the $number parameter .
*
* @ since 3.8 . 0
* @ param array $args {
2013-12-06 20:18:11 +01:00
* Optional . Array of star ratings arguments .
*
* @ type int $rating The rating to display , expressed in either a 0.5 rating increment ,
* or percentage . Default 0.
* @ type string $type Format that the $rating is in . Valid values are 'rating' ( default ),
* or , 'percent' . Default 'rating' .
* @ type int $number The number of ratings that makes up this rating . Default 0.
2013-11-26 03:25:21 +01:00
* }
*/
function wp_star_rating ( $args = array () ) {
$defaults = array (
'rating' => 0 ,
'type' => 'rating' ,
'number' => 0 ,
);
$r = wp_parse_args ( $args , $defaults );
// Non-english decimal places when the $rating is coming from a string
2014-05-15 04:57:14 +02:00
$rating = str_replace ( ',' , '.' , $r [ 'rating' ] );
2013-11-26 03:25:21 +01:00
// Convert Percentage to star rating, 0..5 in .5 increments
2014-05-15 04:57:14 +02:00
if ( 'percent' == $r [ 'type' ] ) {
2013-11-26 03:25:21 +01:00
$rating = round ( $rating / 10 , 0 ) / 2 ;
}
// Calculate the number of each type of star needed
$full_stars = floor ( $rating );
$half_stars = ceil ( $rating - $full_stars );
$empty_stars = 5 - $full_stars - $half_stars ;
2014-05-15 04:57:14 +02:00
if ( $r [ 'number' ] ) {
2013-11-26 03:25:21 +01:00
/* translators: 1: The rating, 2: The number of ratings */
2014-05-15 04:57:14 +02:00
$format = _n ( '%1$s rating based on %2$s rating' , '%1$s rating based on %2$s ratings' , $r [ 'number' ] );
$title = sprintf ( $format , number_format_i18n ( $rating , 1 ), number_format_i18n ( $r [ 'number' ] ) );
2013-11-26 03:25:21 +01:00
} else {
/* translators: 1: The rating */
$title = sprintf ( __ ( '%s rating' ), number_format_i18n ( $rating , 1 ) );
}
echo '<div class="star-rating" title="' . esc_attr ( $title ) . '">' ;
echo str_repeat ( '<div class="star star-full"></div>' , $full_stars );
echo str_repeat ( '<div class="star star-half"></div>' , $half_stars );
echo str_repeat ( '<div class="star star-empty"></div>' , $empty_stars );
echo '</div>' ;
2014-01-24 20:06:15 +01:00
}