| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Deprecated functions from past WordPress versions. You shouldn't use these 4 * functions and look for the alternatives instead. The functions will be 5 * removed in a later version. 6 * 7 * @package WordPress 8 * @subpackage Deprecated 9 */ 10 11 /* 12 * Deprecated functions come here to die. 13 */ 14 15 /** 16 * Retrieves all post data for a given post. 17 * 18 * @since 0.71 19 * @deprecated 1.5.1 Use get_post() 20 * @see get_post() 21 * 22 * @param int $postid Post ID. 23 * @return array Post data. 24 */ 25 function get_postdata($postid) { 26 _deprecated_function( __FUNCTION__, '1.5.1', 'get_post()' ); 27 28 $post = get_post($postid); 29 30 $postdata = array ( 31 'ID' => $post->ID, 32 'Author_ID' => $post->post_author, 33 'Date' => $post->post_date, 34 'Content' => $post->post_content, 35 'Excerpt' => $post->post_excerpt, 36 'Title' => $post->post_title, 37 'Category' => $post->post_category, 38 'post_status' => $post->post_status, 39 'comment_status' => $post->comment_status, 40 'ping_status' => $post->ping_status, 41 'post_password' => $post->post_password, 42 'to_ping' => $post->to_ping, 43 'pinged' => $post->pinged, 44 'post_type' => $post->post_type, 45 'post_name' => $post->post_name 46 ); 47 48 return $postdata; 49 } 50 51 /** 52 * Sets up the WordPress Loop. 53 * 54 * Use The Loop instead. 55 * 56 * @link https://developer.wordpress.org/themes/basics/the-loop/ 57 * 58 * @since 1.0.1 59 * @deprecated 1.5.0 60 * 61 * @global WP_Query $wp_query WordPress Query object. 62 */ 63 function start_wp() { 64 global $wp_query; 65 66 _deprecated_function( __FUNCTION__, '1.5.0', __('new WordPress Loop') ); 67 68 // Since the old style loop is being used, advance the query iterator here. 69 $wp_query->next_post(); 70 71 setup_postdata( get_post() ); 72 } 73 74 /** 75 * Returns or prints a category ID. 76 * 77 * @since 0.71 78 * @deprecated 0.71 Use get_the_category() 79 * @see get_the_category() 80 * 81 * @param bool $display Optional. Whether to display the output. Default true. 82 * @return int Category ID. 83 */ 84 function the_category_ID($display = true) { 85 _deprecated_function( __FUNCTION__, '0.71', 'get_the_category()' ); 86 87 // Grab the first cat in the list. 88 $categories = get_the_category(); 89 $cat = $categories[0]->term_id; 90 91 if ( $display ) 92 echo $cat; 93 94 return $cat; 95 } 96 97 /** 98 * Prints a category with optional text before and after. 99 * 100 * @since 0.71 101 * @deprecated 0.71 Use get_the_category_by_ID() 102 * @see get_the_category_by_ID() 103 * 104 * @param string $before Optional. Text to display before the category. Default empty. 105 * @param string $after Optional. Text to display after the category. Default empty. 106 */ 107 function the_category_head( $before = '', $after = '' ) { 108 global $currentcat, $previouscat; 109 110 _deprecated_function( __FUNCTION__, '0.71', 'get_the_category_by_ID()' ); 111 112 // Grab the first cat in the list. 113 $categories = get_the_category(); 114 $currentcat = $categories[0]->category_id; 115 if ( $currentcat != $previouscat ) { 116 echo $before; 117 echo get_the_category_by_ID($currentcat); 118 echo $after; 119 $previouscat = $currentcat; 120 } 121 } 122 123 /** 124 * Prints a link to the previous post. 125 * 126 * @since 1.5.0 127 * @deprecated 2.0.0 Use previous_post_link() 128 * @see previous_post_link() 129 * 130 * @param string $format 131 * @param string $previous 132 * @param string $title 133 * @param string $in_same_cat 134 * @param int $limitprev 135 * @param string $excluded_categories 136 */ 137 function previous_post($format='%', $previous='previous post: ', $title='yes', $in_same_cat='no', $limitprev=1, $excluded_categories='') { 138 139 _deprecated_function( __FUNCTION__, '2.0.0', 'previous_post_link()' ); 140 141 if ( empty($in_same_cat) || 'no' == $in_same_cat ) 142 $in_same_cat = false; 143 else 144 $in_same_cat = true; 145 146 $post = get_previous_post($in_same_cat, $excluded_categories); 147 148 if ( !$post ) 149 return; 150 151 $string = '<a href="'.get_permalink($post->ID).'">'.$previous; 152 if ( 'yes' == $title ) 153 /** This filter is documented in wp-includes/post-template.php */ 154 $string .= apply_filters('the_title', $post->post_title, $post->ID); 155 $string .= '</a>'; 156 $format = str_replace('%', $string, $format); 157 echo $format; 158 } 159 160 /** 161 * Prints link to the next post. 162 * 163 * @since 0.71 164 * @deprecated 2.0.0 Use next_post_link() 165 * @see next_post_link() 166 * 167 * @param string $format 168 * @param string $next 169 * @param string $title 170 * @param string $in_same_cat 171 * @param int $limitnext 172 * @param string $excluded_categories 173 */ 174 function next_post($format='%', $next='next post: ', $title='yes', $in_same_cat='no', $limitnext=1, $excluded_categories='') { 175 _deprecated_function( __FUNCTION__, '2.0.0', 'next_post_link()' ); 176 177 if ( empty($in_same_cat) || 'no' == $in_same_cat ) 178 $in_same_cat = false; 179 else 180 $in_same_cat = true; 181 182 $post = get_next_post($in_same_cat, $excluded_categories); 183 184 if ( !$post ) 185 return; 186 187 $string = '<a href="'.get_permalink($post->ID).'">'.$next; 188 if ( 'yes' == $title ) 189 /** This filter is documented in wp-includes/post-template.php */ 190 $string .= apply_filters('the_title', $post->post_title, $post->ID); 191 $string .= '</a>'; 192 $format = str_replace('%', $string, $format); 193 echo $format; 194 } 195 196 /** 197 * Whether user can create a post. 198 * 199 * @since 1.5.0 200 * @deprecated 2.0.0 Use current_user_can() 201 * @see current_user_can() 202 * 203 * @param int $user_id 204 * @param int $blog_id Not Used 205 * @param int $category_id Not Used 206 * @return bool 207 */ 208 function user_can_create_post($user_id, $blog_id = 1, $category_id = 'None') { 209 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 210 211 $author_data = get_userdata($user_id); 212 return ($author_data->user_level > 1); 213 } 214 215 /** 216 * Whether user can create a post. 217 * 218 * @since 1.5.0 219 * @deprecated 2.0.0 Use current_user_can() 220 * @see current_user_can() 221 * 222 * @param int $user_id 223 * @param int $blog_id Not Used 224 * @param int $category_id Not Used 225 * @return bool 226 */ 227 function user_can_create_draft($user_id, $blog_id = 1, $category_id = 'None') { 228 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 229 230 $author_data = get_userdata($user_id); 231 return ($author_data->user_level >= 1); 232 } 233 234 /** 235 * Whether user can edit a post. 236 * 237 * @since 1.5.0 238 * @deprecated 2.0.0 Use current_user_can() 239 * @see current_user_can() 240 * 241 * @param int $user_id 242 * @param int $post_id 243 * @param int $blog_id Not Used 244 * @return bool 245 */ 246 function user_can_edit_post($user_id, $post_id, $blog_id = 1) { 247 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 248 249 $author_data = get_userdata($user_id); 250 $post = get_post($post_id); 251 $post_author_data = get_userdata($post->post_author); 252 253 if ( (($user_id == $post_author_data->ID) && !($post->post_status == 'publish' && $author_data->user_level < 2)) 254 || ($author_data->user_level > $post_author_data->user_level) 255 || ($author_data->user_level >= 10) ) { 256 return true; 257 } else { 258 return false; 259 } 260 } 261 262 /** 263 * Whether user can delete a post. 264 * 265 * @since 1.5.0 266 * @deprecated 2.0.0 Use current_user_can() 267 * @see current_user_can() 268 * 269 * @param int $user_id 270 * @param int $post_id 271 * @param int $blog_id Not Used 272 * @return bool 273 */ 274 function user_can_delete_post($user_id, $post_id, $blog_id = 1) { 275 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 276 277 // Right now if one can edit, one can delete. 278 return user_can_edit_post($user_id, $post_id, $blog_id); 279 } 280 281 /** 282 * Whether user can set new posts' dates. 283 * 284 * @since 1.5.0 285 * @deprecated 2.0.0 Use current_user_can() 286 * @see current_user_can() 287 * 288 * @param int $user_id 289 * @param int $blog_id Not Used 290 * @param int $category_id Not Used 291 * @return bool 292 */ 293 function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') { 294 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 295 296 $author_data = get_userdata($user_id); 297 return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id)); 298 } 299 300 /** 301 * Whether user can delete a post. 302 * 303 * @since 1.5.0 304 * @deprecated 2.0.0 Use current_user_can() 305 * @see current_user_can() 306 * 307 * @param int $user_id 308 * @param int $post_id 309 * @param int $blog_id Not Used 310 * @return bool returns true if $user_id can edit $post_id's date 311 */ 312 function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) { 313 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 314 315 $author_data = get_userdata($user_id); 316 return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id)); 317 } 318 319 /** 320 * Whether user can delete a post. 321 * 322 * @since 1.5.0 323 * @deprecated 2.0.0 Use current_user_can() 324 * @see current_user_can() 325 * 326 * @param int $user_id 327 * @param int $post_id 328 * @param int $blog_id Not Used 329 * @return bool returns true if $user_id can edit $post_id's comments 330 */ 331 function user_can_edit_post_comments($user_id, $post_id, $blog_id = 1) { 332 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 333 334 // Right now if one can edit a post, one can edit comments made on it. 335 return user_can_edit_post($user_id, $post_id, $blog_id); 336 } 337 338 /** 339 * Whether user can delete a post. 340 * 341 * @since 1.5.0 342 * @deprecated 2.0.0 Use current_user_can() 343 * @see current_user_can() 344 * 345 * @param int $user_id 346 * @param int $post_id 347 * @param int $blog_id Not Used 348 * @return bool returns true if $user_id can delete $post_id's comments 349 */ 350 function user_can_delete_post_comments($user_id, $post_id, $blog_id = 1) { 351 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 352 353 // Right now if one can edit comments, one can delete comments. 354 return user_can_edit_post_comments($user_id, $post_id, $blog_id); 355 } 356 357 /** 358 * Can user can edit other user. 359 * 360 * @since 1.5.0 361 * @deprecated 2.0.0 Use current_user_can() 362 * @see current_user_can() 363 * 364 * @param int $user_id 365 * @param int $other_user 366 * @return bool 367 */ 368 function user_can_edit_user($user_id, $other_user) { 369 _deprecated_function( __FUNCTION__, '2.0.0', 'current_user_can()' ); 370 371 $user = get_userdata($user_id); 372 $other = get_userdata($other_user); 373 if ( $user->user_level > $other->user_level || $user->user_level > 8 || $user->ID == $other->ID ) 374 return true; 375 else 376 return false; 377 } 378 379 /** 380 * Gets the links associated with category $cat_name. 381 * 382 * @since 0.71 383 * @deprecated 2.1.0 Use get_bookmarks() 384 * @see get_bookmarks() 385 * 386 * @param string $cat_name Optional. The category name to use. If no match is found, uses all. 387 * Default 'noname'. 388 * @param string $before Optional. The HTML to output before the link. Default empty. 389 * @param string $after Optional. The HTML to output after the link. Default '<br />'. 390 * @param string $between Optional. The HTML to output between the link/image and its description. 391 * Not used if no image or $show_images is true. Default ' '. 392 * @param bool $show_images Optional. Whether to show images (if defined). Default true. 393 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 394 * 'description', 'rating', or 'owner'. Default 'id'. 395 * If you start the name with an underscore, the order will be reversed. 396 * Specifying 'rand' as the order will return links in a random order. 397 * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. 398 * Default true. 399 * @param bool $show_rating Optional. Show rating stars/chars. Default false. 400 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 401 * Default -1. 402 * @param int $show_updated Optional. Whether to show last updated timestamp. Default 0. 403 */ 404 function get_linksbyname($cat_name = "noname", $before = '', $after = '<br />', $between = " ", $show_images = true, $orderby = 'id', 405 $show_description = true, $show_rating = false, 406 $limit = -1, $show_updated = 0) { 407 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 408 409 $cat_id = -1; 410 $cat = get_term_by('name', $cat_name, 'link_category'); 411 if ( $cat ) 412 $cat_id = $cat->term_id; 413 414 get_links($cat_id, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated); 415 } 416 417 /** 418 * Gets the links associated with the named category. 419 * 420 * @since 1.0.1 421 * @deprecated 2.1.0 Use wp_list_bookmarks() 422 * @see wp_list_bookmarks() 423 * 424 * @param string $category The category to use. 425 * @param string $args 426 * @return string|null 427 */ 428 function wp_get_linksbyname($category, $args = '') { 429 _deprecated_function(__FUNCTION__, '2.1.0', 'wp_list_bookmarks()'); 430 431 $defaults = array( 432 'after' => '<br />', 433 'before' => '', 434 'categorize' => 0, 435 'category_after' => '', 436 'category_before' => '', 437 'category_name' => $category, 438 'show_description' => 1, 439 'title_li' => '', 440 ); 441 442 $parsed_args = wp_parse_args( $args, $defaults ); 443 444 return wp_list_bookmarks($parsed_args); 445 } 446 447 /** 448 * Gets an array of link objects associated with category $cat_name. 449 * 450 * $links = get_linkobjectsbyname( 'fred' ); 451 * foreach ( $links as $link ) { 452 * echo '<li>' . $link->link_name . '</li>'; 453 * } 454 * 455 * @since 1.0.1 456 * @deprecated 2.1.0 Use get_bookmarks() 457 * @see get_bookmarks() 458 * 459 * @param string $cat_name Optional. The category name to use. If no match is found, uses all. 460 * Default 'noname'. 461 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 462 * 'description', 'rating', or 'owner'. Default 'name'. 463 * If you start the name with an underscore, the order will be reversed. 464 * Specifying 'rand' as the order will return links in a random order. 465 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 466 * Default -1. 467 * @return array 468 */ 469 function get_linkobjectsbyname($cat_name = "noname" , $orderby = 'name', $limit = -1) { 470 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 471 472 $cat_id = -1; 473 $cat = get_term_by('name', $cat_name, 'link_category'); 474 if ( $cat ) 475 $cat_id = $cat->term_id; 476 477 return get_linkobjects($cat_id, $orderby, $limit); 478 } 479 480 /** 481 * Gets an array of link objects associated with category n. 482 * 483 * Usage: 484 * 485 * $links = get_linkobjects(1); 486 * if ($links) { 487 * foreach ($links as $link) { 488 * echo '<li>'.$link->link_name.'<br />'.$link->link_description.'</li>'; 489 * } 490 * } 491 * 492 * Fields are: 493 * 494 * - link_id 495 * - link_url 496 * - link_name 497 * - link_image 498 * - link_target 499 * - link_category 500 * - link_description 501 * - link_visible 502 * - link_owner 503 * - link_rating 504 * - link_updated 505 * - link_rel 506 * - link_notes 507 * 508 * @since 1.0.1 509 * @deprecated 2.1.0 Use get_bookmarks() 510 * @see get_bookmarks() 511 * 512 * @param int $category Optional. The category to use. If no category supplied, uses all. 513 * Default 0. 514 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 515 * 'description', 'rating', or 'owner'. Default 'name'. 516 * If you start the name with an underscore, the order will be reversed. 517 * Specifying 'rand' as the order will return links in a random order. 518 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 519 * Default 0. 520 * @return array 521 */ 522 function get_linkobjects($category = 0, $orderby = 'name', $limit = 0) { 523 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 524 525 $links = get_bookmarks( array( 'category' => $category, 'orderby' => $orderby, 'limit' => $limit ) ) ; 526 527 $links_array = array(); 528 foreach ($links as $link) 529 $links_array[] = $link; 530 531 return $links_array; 532 } 533 534 /** 535 * Gets the links associated with category 'cat_name' and display rating stars/chars. 536 * 537 * @since 0.71 538 * @deprecated 2.1.0 Use get_bookmarks() 539 * @see get_bookmarks() 540 * 541 * @param string $cat_name Optional. The category name to use. If no match is found, uses all. 542 * Default 'noname'. 543 * @param string $before Optional. The HTML to output before the link. Default empty. 544 * @param string $after Optional. The HTML to output after the link. Default '<br />'. 545 * @param string $between Optional. The HTML to output between the link/image and its description. 546 * Not used if no image or $show_images is true. Default ' '. 547 * @param bool $show_images Optional. Whether to show images (if defined). Default true. 548 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 549 * 'description', 'rating', or 'owner'. Default 'id'. 550 * If you start the name with an underscore, the order will be reversed. 551 * Specifying 'rand' as the order will return links in a random order. 552 * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. 553 * Default true. 554 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 555 * Default -1. 556 * @param int $show_updated Optional. Whether to show last updated timestamp. Default 0. 557 */ 558 function get_linksbyname_withrating($cat_name = "noname", $before = '', $after = '<br />', $between = " ", 559 $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { 560 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 561 562 get_linksbyname($cat_name, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); 563 } 564 565 /** 566 * Gets the links associated with category n and display rating stars/chars. 567 * 568 * @since 0.71 569 * @deprecated 2.1.0 Use get_bookmarks() 570 * @see get_bookmarks() 571 * 572 * @param int $category Optional. The category to use. If no category supplied, uses all. 573 * Default 0. 574 * @param string $before Optional. The HTML to output before the link. Default empty. 575 * @param string $after Optional. The HTML to output after the link. Default '<br />'. 576 * @param string $between Optional. The HTML to output between the link/image and its description. 577 * Not used if no image or $show_images is true. Default ' '. 578 * @param bool $show_images Optional. Whether to show images (if defined). Default true. 579 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 580 * 'description', 'rating', or 'owner'. Default 'id'. 581 * If you start the name with an underscore, the order will be reversed. 582 * Specifying 'rand' as the order will return links in a random order. 583 * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. 584 * Default true. 585 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 586 * Default -1. 587 * @param int $show_updated Optional. Whether to show last updated timestamp. Default 0. 588 */ 589 function get_links_withrating($category = -1, $before = '', $after = '<br />', $between = " ", $show_images = true, 590 $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { 591 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 592 593 get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); 594 } 595 596 /** 597 * Gets the auto_toggle setting. 598 * 599 * @since 0.71 600 * @deprecated 2.1.0 601 * 602 * @param int $id The category to get. If no category supplied uses 0 603 * @return int Only returns 0. 604 */ 605 function get_autotoggle($id = 0) { 606 _deprecated_function( __FUNCTION__, '2.1.0' ); 607 return 0; 608 } 609 610 /** 611 * Lists categories. 612 * 613 * @since 0.71 614 * @deprecated 2.1.0 Use wp_list_categories() 615 * @see wp_list_categories() 616 * 617 * @param int $optionall 618 * @param string $all 619 * @param string $sort_column 620 * @param string $sort_order 621 * @param string $file 622 * @param bool $list 623 * @param int $optiondates 624 * @param int $optioncount 625 * @param int $hide_empty 626 * @param int $use_desc_for_title 627 * @param bool $children 628 * @param int $child_of 629 * @param int $categories 630 * @param int $recurse 631 * @param string $feed 632 * @param string $feed_image 633 * @param string $exclude 634 * @param bool $hierarchical 635 * @return null|false 636 */ 637 function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, 638 $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=false, $child_of=0, $categories=0, 639 $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=false) { 640 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_list_categories()' ); 641 642 $query = compact('optionall', 'all', 'sort_column', 'sort_order', 'file', 'list', 'optiondates', 'optioncount', 'hide_empty', 'use_desc_for_title', 'children', 643 'child_of', 'categories', 'recurse', 'feed', 'feed_image', 'exclude', 'hierarchical'); 644 return wp_list_cats($query); 645 } 646 647 /** 648 * Lists categories. 649 * 650 * @since 1.2.0 651 * @deprecated 2.1.0 Use wp_list_categories() 652 * @see wp_list_categories() 653 * 654 * @param string|array $args 655 * @return null|string|false 656 */ 657 function wp_list_cats($args = '') { 658 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_list_categories()' ); 659 660 $parsed_args = wp_parse_args( $args ); 661 662 // Map to new names. 663 if ( isset($parsed_args['optionall']) && isset($parsed_args['all'])) 664 $parsed_args['show_option_all'] = $parsed_args['all']; 665 if ( isset($parsed_args['sort_column']) ) 666 $parsed_args['orderby'] = $parsed_args['sort_column']; 667 if ( isset($parsed_args['sort_order']) ) 668 $parsed_args['order'] = $parsed_args['sort_order']; 669 if ( isset($parsed_args['optiondates']) ) 670 $parsed_args['show_last_update'] = $parsed_args['optiondates']; 671 if ( isset($parsed_args['optioncount']) ) 672 $parsed_args['show_count'] = $parsed_args['optioncount']; 673 if ( isset($parsed_args['list']) ) 674 $parsed_args['style'] = $parsed_args['list'] ? 'list' : 'break'; 675 $parsed_args['title_li'] = ''; 676 677 return wp_list_categories($parsed_args); 678 } 679 680 /** 681 * Deprecated method for generating a drop-down of categories. 682 * 683 * @since 0.71 684 * @deprecated 2.1.0 Use wp_dropdown_categories() 685 * @see wp_dropdown_categories() 686 * 687 * @param int $optionall 688 * @param string $all 689 * @param string $orderby 690 * @param string $order 691 * @param int $show_last_update 692 * @param int $show_count 693 * @param int $hide_empty 694 * @param bool $optionnone 695 * @param int $selected 696 * @param int $exclude 697 * @return string 698 */ 699 function dropdown_cats($optionall = 1, $all = 'All', $orderby = 'ID', $order = 'asc', 700 $show_last_update = 0, $show_count = 0, $hide_empty = 1, $optionnone = false, 701 $selected = 0, $exclude = 0) { 702 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_dropdown_categories()' ); 703 704 $show_option_all = ''; 705 if ( $optionall ) 706 $show_option_all = $all; 707 708 $show_option_none = ''; 709 if ( $optionnone ) 710 $show_option_none = _x( 'None', 'Categories dropdown (show_option_none parameter)' ); 711 712 $vars = compact('show_option_all', 'show_option_none', 'orderby', 'order', 713 'show_last_update', 'show_count', 'hide_empty', 'selected', 'exclude'); 714 $query = add_query_arg($vars, ''); 715 return wp_dropdown_categories($query); 716 } 717 718 /** 719 * Lists authors. 720 * 721 * @since 1.2.0 722 * @deprecated 2.1.0 Use wp_list_authors() 723 * @see wp_list_authors() 724 * 725 * @param bool $optioncount 726 * @param bool $exclude_admin 727 * @param bool $show_fullname 728 * @param bool $hide_empty 729 * @param string $feed 730 * @param string $feed_image 731 * @return null|string 732 */ 733 function list_authors($optioncount = false, $exclude_admin = true, $show_fullname = false, $hide_empty = true, $feed = '', $feed_image = '') { 734 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_list_authors()' ); 735 736 $args = compact('optioncount', 'exclude_admin', 'show_fullname', 'hide_empty', 'feed', 'feed_image'); 737 return wp_list_authors($args); 738 } 739 740 /** 741 * Retrieves a list of post categories. 742 * 743 * @since 1.0.1 744 * @deprecated 2.1.0 Use wp_get_post_categories() 745 * @see wp_get_post_categories() 746 * 747 * @param int $blogid Not Used 748 * @param int $post_id 749 * @return array 750 */ 751 function wp_get_post_cats($blogid = '1', $post_id = 0) { 752 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_get_post_categories()' ); 753 return wp_get_post_categories($post_id); 754 } 755 756 /** 757 * Sets the categories that the post ID belongs to. 758 * 759 * @since 1.0.1 760 * @deprecated 2.1.0 761 * @deprecated Use wp_set_post_categories() 762 * @see wp_set_post_categories() 763 * 764 * @param int $blogid Not used 765 * @param int $post_id 766 * @param array $post_categories 767 * @return bool|mixed 768 */ 769 function wp_set_post_cats($blogid = '1', $post_id = 0, $post_categories = array()) { 770 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_set_post_categories()' ); 771 return wp_set_post_categories($post_id, $post_categories); 772 } 773 774 /** 775 * Retrieves a list of archives. 776 * 777 * @since 0.71 778 * @deprecated 2.1.0 Use wp_get_archives() 779 * @see wp_get_archives() 780 * 781 * @param string $type 782 * @param string $limit 783 * @param string $format 784 * @param string $before 785 * @param string $after 786 * @param bool $show_post_count 787 * @return string|null 788 */ 789 function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) { 790 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_get_archives()' ); 791 $args = compact('type', 'limit', 'format', 'before', 'after', 'show_post_count'); 792 return wp_get_archives($args); 793 } 794 795 /** 796 * Returns or Prints link to the author's posts. 797 * 798 * @since 1.2.0 799 * @deprecated 2.1.0 Use get_author_posts_url() 800 * @see get_author_posts_url() 801 * 802 * @param bool $display 803 * @param int $author_id 804 * @param string $author_nicename Optional. 805 * @return string|null 806 */ 807 function get_author_link($display, $author_id, $author_nicename = '') { 808 _deprecated_function( __FUNCTION__, '2.1.0', 'get_author_posts_url()' ); 809 810 $link = get_author_posts_url($author_id, $author_nicename); 811 812 if ( $display ) 813 echo $link; 814 return $link; 815 } 816 817 /** 818 * Print list of pages based on arguments. 819 * 820 * @since 0.71 821 * @deprecated 2.1.0 Use wp_link_pages() 822 * @see wp_link_pages() 823 * 824 * @param string $before 825 * @param string $after 826 * @param string $next_or_number 827 * @param string $nextpagelink 828 * @param string $previouspagelink 829 * @param string $pagelink 830 * @param string $more_file 831 * @return string 832 */ 833 function link_pages($before='<br />', $after='<br />', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', 834 $pagelink='%', $more_file='') { 835 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_link_pages()' ); 836 837 $args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file'); 838 return wp_link_pages($args); 839 } 840 841 /** 842 * Get value based on option. 843 * 844 * @since 0.71 845 * @deprecated 2.1.0 Use get_option() 846 * @see get_option() 847 * 848 * @param string $option 849 * @return string 850 */ 851 function get_settings($option) { 852 _deprecated_function( __FUNCTION__, '2.1.0', 'get_option()' ); 853 854 return get_option($option); 855 } 856 857 /** 858 * Print the permalink of the current post in the loop. 859 * 860 * @since 0.71 861 * @deprecated 1.2.0 Use the_permalink() 862 * @see the_permalink() 863 */ 864 function permalink_link() { 865 _deprecated_function( __FUNCTION__, '1.2.0', 'the_permalink()' ); 866 the_permalink(); 867 } 868 869 /** 870 * Print the permalink to the RSS feed. 871 * 872 * @since 0.71 873 * @deprecated 2.3.0 Use the_permalink_rss() 874 * @see the_permalink_rss() 875 * 876 * @param string $deprecated 877 */ 878 function permalink_single_rss($deprecated = '') { 879 _deprecated_function( __FUNCTION__, '2.3.0', 'the_permalink_rss()' ); 880 the_permalink_rss(); 881 } 882 883 /** 884 * Gets the links associated with category. 885 * 886 * @since 1.0.1 887 * @deprecated 2.1.0 Use wp_list_bookmarks() 888 * @see wp_list_bookmarks() 889 * 890 * @param string $args a query string 891 * @return null|string 892 */ 893 function wp_get_links($args = '') { 894 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_list_bookmarks()' ); 895 896 if ( ! str_contains( $args, '=' ) ) { 897 $cat_id = $args; 898 $args = add_query_arg( 'category', $cat_id, $args ); 899 } 900 901 $defaults = array( 902 'after' => '<br />', 903 'before' => '', 904 'between' => ' ', 905 'categorize' => 0, 906 'category' => '', 907 'echo' => true, 908 'limit' => -1, 909 'orderby' => 'name', 910 'show_description' => true, 911 'show_images' => true, 912 'show_rating' => false, 913 'show_updated' => true, 914 'title_li' => '', 915 ); 916 917 $parsed_args = wp_parse_args( $args, $defaults ); 918 919 return wp_list_bookmarks($parsed_args); 920 } 921 922 /** 923 * Gets the links associated with category by ID. 924 * 925 * @since 0.71 926 * @deprecated 2.1.0 Use get_bookmarks() 927 * @see get_bookmarks() 928 * 929 * @param int $category Optional. The category to use. If no category supplied uses all. 930 * Default 0. 931 * @param string $before Optional. The HTML to output before the link. Default empty. 932 * @param string $after Optional. The HTML to output after the link. Default '<br />'. 933 * @param string $between Optional. The HTML to output between the link/image and its description. 934 * Not used if no image or $show_images is true. Default ' '. 935 * @param bool $show_images Optional. Whether to show images (if defined). Default true. 936 * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 937 * 'description', 'rating', or 'owner'. Default 'name'. 938 * If you start the name with an underscore, the order will be reversed. 939 * Specifying 'rand' as the order will return links in a random order. 940 * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. 941 * Default true. 942 * @param bool $show_rating Optional. Show rating stars/chars. Default false. 943 * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. 944 * Default -1. 945 * @param int $show_updated Optional. Whether to show last updated timestamp. Default 1. 946 * @param bool $display Whether to display the results, or return them instead. 947 * @return null|string 948 */ 949 function get_links($category = -1, $before = '', $after = '<br />', $between = ' ', $show_images = true, $orderby = 'name', 950 $show_description = true, $show_rating = false, $limit = -1, $show_updated = 1, $display = true) { 951 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmarks()' ); 952 953 $order = 'ASC'; 954 if ( str_starts_with($orderby, '_') ) { 955 $order = 'DESC'; 956 $orderby = substr($orderby, 1); 957 } 958 959 if ( $category == -1 ) // get_bookmarks() uses '' to signify all categories. 960 $category = ''; 961 962 $results = get_bookmarks(array('category' => $category, 'orderby' => $orderby, 'order' => $order, 'show_updated' => $show_updated, 'limit' => $limit)); 963 964 if ( !$results ) 965 return; 966 967 $output = ''; 968 969 foreach ( (array) $results as $row ) { 970 if ( !isset($row->recently_updated) ) 971 $row->recently_updated = false; 972 $output .= $before; 973 if ( $show_updated && $row->recently_updated ) 974 $output .= get_option('links_recently_updated_prepend'); 975 $the_link = '#'; 976 if ( !empty($row->link_url) ) 977 $the_link = esc_url($row->link_url); 978 $rel = $row->link_rel; 979 if ( '' != $rel ) 980 $rel = ' rel="' . $rel . '"'; 981 982 $desc = esc_attr(sanitize_bookmark_field('link_description', $row->link_description, $row->link_id, 'display')); 983 $name = esc_attr(sanitize_bookmark_field('link_name', $row->link_name, $row->link_id, 'display')); 984 $title = $desc; 985 986 if ( $show_updated ) 987 if ( !str_starts_with($row->link_updated_f, '00') ) 988 $title .= ' ('.__('Last updated') . ' ' . gmdate(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * HOUR_IN_SECONDS)) . ')'; 989 990 if ( '' != $title ) 991 $title = ' title="' . $title . '"'; 992 993 $alt = ' alt="' . $name . '"'; 994 995 $target = $row->link_target; 996 if ( '' != $target ) 997 $target = ' target="' . $target . '"'; 998 999 $output .= '<a href="' . $the_link . '"' . $rel . $title . $target. '>'; 1000 1001 if ( '' != $row->link_image && $show_images ) { 1002 if ( str_contains( $row->link_image, 'http' ) ) 1003 $output .= '<img src="' . $row->link_image . '"' . $alt . $title . ' />'; 1004 else // If it's a relative path. 1005 $output .= '<img src="' . get_option('siteurl') . $row->link_image . '"' . $alt . $title . ' />'; 1006 } else { 1007 $output .= $name; 1008 } 1009 1010 $output .= '</a>'; 1011 1012 if ( $show_updated && $row->recently_updated ) 1013 $output .= get_option('links_recently_updated_append'); 1014 1015 if ( $show_description && '' != $desc ) 1016 $output .= $between . $desc; 1017 1018 if ($show_rating) { 1019 $output .= $between . get_linkrating($row); 1020 } 1021 1022 $output .= "$after\n"; 1023 } // End while. 1024 1025 if ( !$display ) 1026 return $output; 1027 echo $output; 1028 } 1029 1030 /** 1031 * Output entire list of links by category. 1032 * 1033 * Output a list of all links, listed by category, using the settings in 1034 * $wpdb->linkcategories and output it as a nested HTML unordered list. 1035 * 1036 * @since 1.0.1 1037 * @deprecated 2.1.0 Use wp_list_bookmarks() 1038 * @see wp_list_bookmarks() 1039 * 1040 * @param string $order Sort link categories by 'name' or 'id' 1041 */ 1042 function get_links_list($order = 'name') { 1043 _deprecated_function( __FUNCTION__, '2.1.0', 'wp_list_bookmarks()' ); 1044 1045 $order = strtolower($order); 1046 1047 // Handle link category sorting. 1048 $direction = 'ASC'; 1049 if ( str_starts_with( $order, '_' ) ) { 1050 $direction = 'DESC'; 1051 $order = substr($order,1); 1052 } 1053 1054 if ( !isset($direction) ) 1055 $direction = ''; 1056 1057 $cats = get_categories(array('type' => 'link', 'orderby' => $order, 'order' => $direction, 'hierarchical' => 0)); 1058 1059 // Display each category. 1060 if ( $cats ) { 1061 foreach ( (array) $cats as $cat ) { 1062 // Handle each category. 1063 1064 // Display the category name. 1065 /** This filter is documented in wp-includes/bookmark-template.php */ 1066 echo ' <li id="linkcat-' . $cat->term_id . '" class="linkcat"><h2>' . apply_filters('link_category', $cat->name ) . "</h2>\n\t<ul>\n"; 1067 // Call get_links() with all the appropriate params. 1068 get_links($cat->term_id, '<li>', "</li>", "\n", true, 'name', false); 1069 1070 // Close the last category. 1071 echo "\n\t</ul>\n</li>\n"; 1072 } 1073 } 1074 } 1075 1076 /** 1077 * Show the link to the links popup and the number of links. 1078 * 1079 * @since 0.71 1080 * @deprecated 2.1.0 1081 * 1082 * @param string $text the text of the link 1083 * @param int $width the width of the popup window 1084 * @param int $height the height of the popup window 1085 * @param string $file the page to open in the popup window 1086 * @param bool $count the number of links in the db 1087 */ 1088 function links_popup_script($text = 'Links', $width=400, $height=400, $file='links.all.php', $count = true) { 1089 _deprecated_function( __FUNCTION__, '2.1.0' ); 1090 } 1091 1092 /** 1093 * Legacy function that retrieved the value of a link's link_rating field. 1094 * 1095 * @since 1.0.1 1096 * @deprecated 2.1.0 Use sanitize_bookmark_field() 1097 * @see sanitize_bookmark_field() 1098 * 1099 * @param object $link Link object. 1100 * @return mixed Value of the 'link_rating' field, false otherwise. 1101 */ 1102 function get_linkrating( $link ) { 1103 _deprecated_function( __FUNCTION__, '2.1.0', 'sanitize_bookmark_field()' ); 1104 return sanitize_bookmark_field('link_rating', $link->link_rating, $link->link_id, 'display'); 1105 } 1106 1107 /** 1108 * Gets the name of category by ID. 1109 * 1110 * @since 0.71 1111 * @deprecated 2.1.0 Use get_category() 1112 * @see get_category() 1113 * 1114 * @param int $id The category to get. If no category supplied uses 0 1115 * @return string 1116 */ 1117 function get_linkcatname($id = 0) { 1118 _deprecated_function( __FUNCTION__, '2.1.0', 'get_category()' ); 1119 1120 $id = (int) $id; 1121 1122 if ( empty($id) ) 1123 return ''; 1124 1125 $cats = wp_get_link_cats($id); 1126 1127 if ( empty($cats) || ! is_array($cats) ) 1128 return ''; 1129 1130 $cat_id = (int) $cats[0]; // Take the first cat. 1131 1132 $cat = get_category($cat_id); 1133 return $cat->name; 1134 } 1135 1136 /** 1137 * Print RSS comment feed link. 1138 * 1139 * @since 1.0.1 1140 * @deprecated 2.5.0 Use post_comments_feed_link() 1141 * @see post_comments_feed_link() 1142 * 1143 * @param string $link_text 1144 */ 1145 function comments_rss_link($link_text = 'Comments RSS') { 1146 _deprecated_function( __FUNCTION__, '2.5.0', 'post_comments_feed_link()' ); 1147 post_comments_feed_link($link_text); 1148 } 1149 1150 /** 1151 * Print/Return link to category RSS2 feed. 1152 * 1153 * @since 1.2.0 1154 * @deprecated 2.5.0 Use get_category_feed_link() 1155 * @see get_category_feed_link() 1156 * 1157 * @param bool $display 1158 * @param int $cat_id 1159 * @return string 1160 */ 1161 function get_category_rss_link($display = false, $cat_id = 1) { 1162 _deprecated_function( __FUNCTION__, '2.5.0', 'get_category_feed_link()' ); 1163 1164 $link = get_category_feed_link($cat_id, 'rss2'); 1165 1166 if ( $display ) 1167 echo $link; 1168 return $link; 1169 } 1170 1171 /** 1172 * Print/Return link to author RSS feed. 1173 * 1174 * @since 1.2.0 1175 * @deprecated 2.5.0 Use get_author_feed_link() 1176 * @see get_author_feed_link() 1177 * 1178 * @param bool $display 1179 * @param int $author_id 1180 * @return string 1181 */ 1182 function get_author_rss_link($display = false, $author_id = 1) { 1183 _deprecated_function( __FUNCTION__, '2.5.0', 'get_author_feed_link()' ); 1184 1185 $link = get_author_feed_link($author_id); 1186 if ( $display ) 1187 echo $link; 1188 return $link; 1189 } 1190 1191 /** 1192 * Return link to the post RSS feed. 1193 * 1194 * @since 1.5.0 1195 * @deprecated 2.2.0 Use get_post_comments_feed_link() 1196 * @see get_post_comments_feed_link() 1197 * 1198 * @return string 1199 */ 1200 function comments_rss() { 1201 _deprecated_function( __FUNCTION__, '2.2.0', 'get_post_comments_feed_link()' ); 1202 return esc_url( get_post_comments_feed_link() ); 1203 } 1204 1205 /** 1206 * An alias of wp_create_user(). 1207 * 1208 * @since 2.0.0 1209 * @deprecated 2.0.0 Use wp_create_user() 1210 * @see wp_create_user() 1211 * 1212 * @param string $username The user's username. 1213 * @param string $password The user's password. 1214 * @param string $email The user's email. 1215 * @return int The new user's ID. 1216 */ 1217 function create_user($username, $password, $email) { 1218 _deprecated_function( __FUNCTION__, '2.0.0', 'wp_create_user()' ); 1219 return wp_create_user($username, $password, $email); 1220 } 1221 1222 /** 1223 * Unused function. 1224 * 1225 * @deprecated 2.5.0 1226 */ 1227 function gzip_compression() { 1228 _deprecated_function( __FUNCTION__, '2.5.0' ); 1229 return false; 1230 } 1231 1232 /** 1233 * Retrieve an array of comment data about comment $comment_id. 1234 * 1235 * @since 0.71 1236 * @deprecated 2.7.0 Use get_comment() 1237 * @see get_comment() 1238 * 1239 * @param int $comment_id The ID of the comment 1240 * @param int $no_cache Whether to use the cache (cast to bool) 1241 * @param bool $include_unapproved Whether to include unapproved comments 1242 * @return array The comment data 1243 */ 1244 function get_commentdata( $comment_id, $no_cache = 0, $include_unapproved = false ) { 1245 _deprecated_function( __FUNCTION__, '2.7.0', 'get_comment()' ); 1246 return get_comment($comment_id, ARRAY_A); 1247 } 1248 1249 /** 1250 * Retrieve the category name by the category ID. 1251 * 1252 * @since 0.71 1253 * @deprecated 2.8.0 Use get_cat_name() 1254 * @see get_cat_name() 1255 * 1256 * @param int $cat_id Category ID 1257 * @return string category name 1258 */ 1259 function get_catname( $cat_id ) { 1260 _deprecated_function( __FUNCTION__, '2.8.0', 'get_cat_name()' ); 1261 return get_cat_name( $cat_id ); 1262 } 1263 1264 /** 1265 * Retrieve category children list separated before and after the term IDs. 1266 * 1267 * @since 1.2.0 1268 * @deprecated 2.8.0 Use get_term_children() 1269 * @see get_term_children() 1270 * 1271 * @param int $id Category ID to retrieve children. 1272 * @param string $before Optional. Prepend before category term ID. Default '/'. 1273 * @param string $after Optional. Append after category term ID. Default empty string. 1274 * @param array $visited Optional. Category Term IDs that have already been added. 1275 * Default empty array. 1276 * @return string 1277 */ 1278 function get_category_children( $id, $before = '/', $after = '', $visited = array() ) { 1279 _deprecated_function( __FUNCTION__, '2.8.0', 'get_term_children()' ); 1280 if ( 0 == $id ) 1281 return ''; 1282 1283 $chain = ''; 1284 /** TODO: Consult hierarchy */ 1285 $cat_ids = get_all_category_ids(); 1286 foreach ( (array) $cat_ids as $cat_id ) { 1287 if ( $cat_id == $id ) 1288 continue; 1289 1290 $category = get_category( $cat_id ); 1291 if ( is_wp_error( $category ) ) 1292 return $category; 1293 if ( $category->parent == $id && !in_array( $category->term_id, $visited ) ) { 1294 $visited[] = $category->term_id; 1295 $chain .= $before.$category->term_id.$after; 1296 $chain .= get_category_children( $category->term_id, $before, $after ); 1297 } 1298 } 1299 return $chain; 1300 } 1301 1302 /** 1303 * Retrieves all category IDs. 1304 * 1305 * @since 2.0.0 1306 * @deprecated 4.0.0 Use get_terms() 1307 * @see get_terms() 1308 * 1309 * @link https://developer.wordpress.org/reference/functions/get_all_category_ids/ 1310 * 1311 * @return int[] List of all of the category IDs. 1312 */ 1313 function get_all_category_ids() { 1314 _deprecated_function( __FUNCTION__, '4.0.0', 'get_terms()' ); 1315 1316 $cat_ids = get_terms( 1317 array( 1318 'taxonomy' => 'category', 1319 'fields' => 'ids', 1320 'get' => 'all', 1321 ) 1322 ); 1323 1324 return $cat_ids; 1325 } 1326 1327 /** 1328 * Retrieve the description of the author of the current post. 1329 * 1330 * @since 1.5.0 1331 * @deprecated 2.8.0 Use get_the_author_meta() 1332 * @see get_the_author_meta() 1333 * 1334 * @return string The author's description. 1335 */ 1336 function get_the_author_description() { 1337 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'description\')' ); 1338 return get_the_author_meta('description'); 1339 } 1340 1341 /** 1342 * Display the description of the author of the current post. 1343 * 1344 * @since 1.0.0 1345 * @deprecated 2.8.0 Use the_author_meta() 1346 * @see the_author_meta() 1347 */ 1348 function the_author_description() { 1349 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'description\')' ); 1350 the_author_meta('description'); 1351 } 1352 1353 /** 1354 * Retrieve the login name of the author of the current post. 1355 * 1356 * @since 1.5.0 1357 * @deprecated 2.8.0 Use get_the_author_meta() 1358 * @see get_the_author_meta() 1359 * 1360 * @return string The author's login name (username). 1361 */ 1362 function get_the_author_login() { 1363 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'login\')' ); 1364 return get_the_author_meta('login'); 1365 } 1366 1367 /** 1368 * Display the login name of the author of the current post. 1369 * 1370 * @since 0.71 1371 * @deprecated 2.8.0 Use the_author_meta() 1372 * @see the_author_meta() 1373 */ 1374 function the_author_login() { 1375 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'login\')' ); 1376 the_author_meta('login'); 1377 } 1378 1379 /** 1380 * Retrieve the first name of the author of the current post. 1381 * 1382 * @since 1.5.0 1383 * @deprecated 2.8.0 Use get_the_author_meta() 1384 * @see get_the_author_meta() 1385 * 1386 * @return string The author's first name. 1387 */ 1388 function get_the_author_firstname() { 1389 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'first_name\')' ); 1390 return get_the_author_meta('first_name'); 1391 } 1392 1393 /** 1394 * Display the first name of the author of the current post. 1395 * 1396 * @since 0.71 1397 * @deprecated 2.8.0 Use the_author_meta() 1398 * @see the_author_meta() 1399 */ 1400 function the_author_firstname() { 1401 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'first_name\')' ); 1402 the_author_meta('first_name'); 1403 } 1404 1405 /** 1406 * Retrieve the last name of the author of the current post. 1407 * 1408 * @since 1.5.0 1409 * @deprecated 2.8.0 Use get_the_author_meta() 1410 * @see get_the_author_meta() 1411 * 1412 * @return string The author's last name. 1413 */ 1414 function get_the_author_lastname() { 1415 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'last_name\')' ); 1416 return get_the_author_meta('last_name'); 1417 } 1418 1419 /** 1420 * Display the last name of the author of the current post. 1421 * 1422 * @since 0.71 1423 * @deprecated 2.8.0 Use the_author_meta() 1424 * @see the_author_meta() 1425 */ 1426 function the_author_lastname() { 1427 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'last_name\')' ); 1428 the_author_meta('last_name'); 1429 } 1430 1431 /** 1432 * Retrieve the nickname of the author of the current post. 1433 * 1434 * @since 1.5.0 1435 * @deprecated 2.8.0 Use get_the_author_meta() 1436 * @see get_the_author_meta() 1437 * 1438 * @return string The author's nickname. 1439 */ 1440 function get_the_author_nickname() { 1441 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'nickname\')' ); 1442 return get_the_author_meta('nickname'); 1443 } 1444 1445 /** 1446 * Display the nickname of the author of the current post. 1447 * 1448 * @since 0.71 1449 * @deprecated 2.8.0 Use the_author_meta() 1450 * @see the_author_meta() 1451 */ 1452 function the_author_nickname() { 1453 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'nickname\')' ); 1454 the_author_meta('nickname'); 1455 } 1456 1457 /** 1458 * Retrieve the email of the author of the current post. 1459 * 1460 * @since 1.5.0 1461 * @deprecated 2.8.0 Use get_the_author_meta() 1462 * @see get_the_author_meta() 1463 * 1464 * @return string The author's username. 1465 */ 1466 function get_the_author_email() { 1467 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'email\')' ); 1468 return get_the_author_meta('email'); 1469 } 1470 1471 /** 1472 * Display the email of the author of the current post. 1473 * 1474 * @since 0.71 1475 * @deprecated 2.8.0 Use the_author_meta() 1476 * @see the_author_meta() 1477 */ 1478 function the_author_email() { 1479 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'email\')' ); 1480 the_author_meta('email'); 1481 } 1482 1483 /** 1484 * Retrieve the ICQ number of the author of the current post. 1485 * 1486 * @since 1.5.0 1487 * @deprecated 2.8.0 Use get_the_author_meta() 1488 * @see get_the_author_meta() 1489 * 1490 * @return string The author's ICQ number. 1491 */ 1492 function get_the_author_icq() { 1493 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'icq\')' ); 1494 return get_the_author_meta('icq'); 1495 } 1496 1497 /** 1498 * Display the ICQ number of the author of the current post. 1499 * 1500 * @since 0.71 1501 * @deprecated 2.8.0 Use the_author_meta() 1502 * @see the_author_meta() 1503 */ 1504 function the_author_icq() { 1505 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'icq\')' ); 1506 the_author_meta('icq'); 1507 } 1508 1509 /** 1510 * Retrieve the Yahoo! IM name of the author of the current post. 1511 * 1512 * @since 1.5.0 1513 * @deprecated 2.8.0 Use get_the_author_meta() 1514 * @see get_the_author_meta() 1515 * 1516 * @return string The author's Yahoo! IM name. 1517 */ 1518 function get_the_author_yim() { 1519 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'yim\')' ); 1520 return get_the_author_meta('yim'); 1521 } 1522 1523 /** 1524 * Display the Yahoo! IM name of the author of the current post. 1525 * 1526 * @since 0.71 1527 * @deprecated 2.8.0 Use the_author_meta() 1528 * @see the_author_meta() 1529 */ 1530 function the_author_yim() { 1531 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'yim\')' ); 1532 the_author_meta('yim'); 1533 } 1534 1535 /** 1536 * Retrieve the MSN address of the author of the current post. 1537 * 1538 * @since 1.5.0 1539 * @deprecated 2.8.0 Use get_the_author_meta() 1540 * @see get_the_author_meta() 1541 * 1542 * @return string The author's MSN address. 1543 */ 1544 function get_the_author_msn() { 1545 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'msn\')' ); 1546 return get_the_author_meta('msn'); 1547 } 1548 1549 /** 1550 * Display the MSN address of the author of the current post. 1551 * 1552 * @since 0.71 1553 * @deprecated 2.8.0 Use the_author_meta() 1554 * @see the_author_meta() 1555 */ 1556 function the_author_msn() { 1557 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'msn\')' ); 1558 the_author_meta('msn'); 1559 } 1560 1561 /** 1562 * Retrieve the AIM address of the author of the current post. 1563 * 1564 * @since 1.5.0 1565 * @deprecated 2.8.0 Use get_the_author_meta() 1566 * @see get_the_author_meta() 1567 * 1568 * @return string The author's AIM address. 1569 */ 1570 function get_the_author_aim() { 1571 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'aim\')' ); 1572 return get_the_author_meta('aim'); 1573 } 1574 1575 /** 1576 * Display the AIM address of the author of the current post. 1577 * 1578 * @since 0.71 1579 * @deprecated 2.8.0 Use the_author_meta('aim') 1580 * @see the_author_meta() 1581 */ 1582 function the_author_aim() { 1583 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'aim\')' ); 1584 the_author_meta('aim'); 1585 } 1586 1587 /** 1588 * Retrieve the specified author's preferred display name. 1589 * 1590 * @since 1.0.0 1591 * @deprecated 2.8.0 Use get_the_author_meta() 1592 * @see get_the_author_meta() 1593 * 1594 * @param int $auth_id The ID of the author. 1595 * @return string The author's display name. 1596 */ 1597 function get_author_name( $auth_id = false ) { 1598 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'display_name\')' ); 1599 return get_the_author_meta('display_name', $auth_id); 1600 } 1601 1602 /** 1603 * Retrieve the URL to the home page of the author of the current post. 1604 * 1605 * @since 1.5.0 1606 * @deprecated 2.8.0 Use get_the_author_meta() 1607 * @see get_the_author_meta() 1608 * 1609 * @return string The URL to the author's page. 1610 */ 1611 function get_the_author_url() { 1612 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'url\')' ); 1613 return get_the_author_meta('url'); 1614 } 1615 1616 /** 1617 * Display the URL to the home page of the author of the current post. 1618 * 1619 * @since 0.71 1620 * @deprecated 2.8.0 Use the_author_meta() 1621 * @see the_author_meta() 1622 */ 1623 function the_author_url() { 1624 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'url\')' ); 1625 the_author_meta('url'); 1626 } 1627 1628 /** 1629 * Retrieve the ID of the author of the current post. 1630 * 1631 * @since 1.5.0 1632 * @deprecated 2.8.0 Use get_the_author_meta() 1633 * @see get_the_author_meta() 1634 * 1635 * @return string|int The author's ID. 1636 */ 1637 function get_the_author_ID() { 1638 _deprecated_function( __FUNCTION__, '2.8.0', 'get_the_author_meta(\'ID\')' ); 1639 return get_the_author_meta('ID'); 1640 } 1641 1642 /** 1643 * Display the ID of the author of the current post. 1644 * 1645 * @since 0.71 1646 * @deprecated 2.8.0 Use the_author_meta() 1647 * @see the_author_meta() 1648 */ 1649 function the_author_ID() { 1650 _deprecated_function( __FUNCTION__, '2.8.0', 'the_author_meta(\'ID\')' ); 1651 the_author_meta('ID'); 1652 } 1653 1654 /** 1655 * Display the post content for the feed. 1656 * 1657 * For encoding the HTML or the $encode_html parameter, there are three possible values: 1658 * - '0' will make urls footnotes and use make_url_footnote(). 1659 * - '1' will encode special characters and automatically display all of the content. 1660 * - '2' will strip all HTML tags from the content. 1661 * 1662 * Also note that you cannot set the amount of words and not set the HTML encoding. 1663 * If that is the case, then the HTML encoding will default to 2, which will strip 1664 * all HTML tags. 1665 * 1666 * To restrict the amount of words of the content, you can use the cut parameter. 1667 * If the content is less than the amount, then there won't be any dots added to the end. 1668 * If there is content left over, then dots will be added and the rest of the content 1669 * will be removed. 1670 * 1671 * @since 0.71 1672 * 1673 * @deprecated 2.9.0 Use the_content_feed() 1674 * @see the_content_feed() 1675 * 1676 * @param string $more_link_text Optional. Text to display when more content is available 1677 * but not displayed. Default '(more...)'. 1678 * @param int $stripteaser Optional. Default 0. 1679 * @param string $more_file Optional. 1680 * @param int $cut Optional. Amount of words to keep for the content. 1681 * @param int $encode_html Optional. How to encode the content. 1682 */ 1683 function the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) { 1684 _deprecated_function( __FUNCTION__, '2.9.0', 'the_content_feed()' ); 1685 $content = get_the_content($more_link_text, $stripteaser); 1686 1687 /** 1688 * Filters the post content in the context of an RSS feed. 1689 * 1690 * @since 0.71 1691 * 1692 * @param string $content Content of the current post. 1693 */ 1694 $content = apply_filters('the_content_rss', $content); 1695 if ( $cut && !$encode_html ) 1696 $encode_html = 2; 1697 if ( 1== $encode_html ) { 1698 $content = esc_html($content); 1699 $cut = 0; 1700 } elseif ( 0 == $encode_html ) { 1701 $content = make_url_footnote($content); 1702 } elseif ( 2 == $encode_html ) { 1703 $content = strip_tags($content); 1704 } 1705 if ( $cut ) { 1706 $blah = explode(' ', $content); 1707 if ( count($blah) > $cut ) { 1708 $k = $cut; 1709 $use_dotdotdot = 1; 1710 } else { 1711 $k = count($blah); 1712 $use_dotdotdot = 0; 1713 } 1714 1715 /** @todo Check performance, might be faster to use array slice instead. */ 1716 for ( $i=0; $i<$k; $i++ ) 1717 $excerpt .= $blah[$i].' '; 1718 $excerpt .= ($use_dotdotdot) ? '...' : ''; 1719 $content = $excerpt; 1720 } 1721 $content = str_replace(']]>', ']]>', $content); 1722 echo $content; 1723 } 1724 1725 /** 1726 * Strip HTML and put links at the bottom of stripped content. 1727 * 1728 * Searches for all of the links, strips them out of the content, and places 1729 * them at the bottom of the content with numbers. 1730 * 1731 * @since 0.71 1732 * @deprecated 2.9.0 1733 * 1734 * @param string $content Content to get links. 1735 * @return string HTML stripped out of content with links at the bottom. 1736 */ 1737 function make_url_footnote( $content ) { 1738 _deprecated_function( __FUNCTION__, '2.9.0', '' ); 1739 preg_match_all( '/<a(.+?)href=\"(.+?)\"(.*?)>(.+?)<\/a>/', $content, $matches ); 1740 $links_summary = "\n"; 1741 for ( $i = 0, $c = count( $matches[0] ); $i < $c; $i++ ) { 1742 $link_match = $matches[0][$i]; 1743 $link_number = '['.($i+1).']'; 1744 $link_url = $matches[2][$i]; 1745 $link_text = $matches[4][$i]; 1746 $content = str_replace( $link_match, $link_text . ' ' . $link_number, $content ); 1747 $link_url = ( ( strtolower( substr( $link_url, 0, 7 ) ) !== 'http://' ) && ( strtolower( substr( $link_url, 0, 8 ) ) !== 'https://' ) ) ? get_option( 'home' ) . $link_url : $link_url; 1748 $links_summary .= "\n" . $link_number . ' ' . $link_url; 1749 } 1750 $content = strip_tags( $content ); 1751 $content .= $links_summary; 1752 return $content; 1753 } 1754 1755 /** 1756 * Retrieve translated string with vertical bar context 1757 * 1758 * Quite a few times, there will be collisions with similar translatable text 1759 * found in more than two places but with different translated context. 1760 * 1761 * In order to use the separate contexts, the _c() function is used and the 1762 * translatable string uses a pipe ('|') which has the context the string is in. 1763 * 1764 * When the translated string is returned, it is everything before the pipe, not 1765 * including the pipe character. If there is no pipe in the translated text then 1766 * everything is returned. 1767 * 1768 * @since 2.2.0 1769 * @deprecated 2.9.0 Use _x() 1770 * @see _x() 1771 * 1772 * @param string $text Text to translate. 1773 * @param string $domain Optional. Domain to retrieve the translated text. 1774 * @return string Translated context string without pipe. 1775 */ 1776 function _c( $text, $domain = 'default' ) { 1777 _deprecated_function( __FUNCTION__, '2.9.0', '_x()' ); 1778 return before_last_bar( translate( $text, $domain ) ); 1779 } 1780 1781 /** 1782 * Translates $text like translate(), but assumes that the text 1783 * contains a context after its last vertical bar. 1784 * 1785 * @since 2.5.0 1786 * @deprecated 3.0.0 Use _x() 1787 * @see _x() 1788 * 1789 * @param string $text Text to translate. 1790 * @param string $domain Domain to retrieve the translated text. 1791 * @return string Translated text. 1792 */ 1793 function translate_with_context( $text, $domain = 'default' ) { 1794 _deprecated_function( __FUNCTION__, '2.9.0', '_x()' ); 1795 return before_last_bar( translate( $text, $domain ) ); 1796 } 1797 1798 /** 1799 * Legacy version of _n(), which supports contexts. 1800 * 1801 * Strips everything from the translation after the last bar. 1802 * 1803 * @since 2.7.0 1804 * @deprecated 3.0.0 Use _nx() 1805 * @see _nx() 1806 * 1807 * @param string $single The text to be used if the number is singular. 1808 * @param string $plural The text to be used if the number is plural. 1809 * @param int $number The number to compare against to use either the singular or plural form. 1810 * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. 1811 * Default 'default'. 1812 * @return string The translated singular or plural form. 1813 */ 1814 function _nc( $single, $plural, $number, $domain = 'default' ) { 1815 _deprecated_function( __FUNCTION__, '2.9.0', '_nx()' ); 1816 return before_last_bar( _n( $single, $plural, $number, $domain ) ); 1817 } 1818 1819 /** 1820 * Retrieve the plural or single form based on the amount. 1821 * 1822 * @since 1.2.0 1823 * @deprecated 2.8.0 Use _n() 1824 * @see _n() 1825 */ 1826 function __ngettext( ...$args ) { 1827 _deprecated_function( __FUNCTION__, '2.8.0', '_n()' ); 1828 return _n( ...$args ); 1829 } 1830 1831 /** 1832 * Register plural strings in POT file, but don't translate them. 1833 * 1834 * @since 2.5.0 1835 * @deprecated 2.8.0 Use _n_noop() 1836 * @see _n_noop() 1837 */ 1838 function __ngettext_noop( ...$args ) { 1839 _deprecated_function( __FUNCTION__, '2.8.0', '_n_noop()' ); 1840 return _n_noop( ...$args ); 1841 1842 } 1843 1844 /** 1845 * Retrieve all autoload options, or all options if no autoloaded ones exist. 1846 * 1847 * @since 1.0.0 1848 * @deprecated 3.0.0 Use wp_load_alloptions()) 1849 * @see wp_load_alloptions() 1850 * 1851 * @return array List of all options. 1852 */ 1853 function get_alloptions() { 1854 _deprecated_function( __FUNCTION__, '3.0.0', 'wp_load_alloptions()' ); 1855 return wp_load_alloptions(); 1856 } 1857 1858 /** 1859 * Retrieve HTML content of attachment image with link. 1860 * 1861 * @since 2.0.0 1862 * @deprecated 2.5.0 Use wp_get_attachment_link() 1863 * @see wp_get_attachment_link() 1864 * 1865 * @param int $id Optional. Post ID. 1866 * @param bool $fullsize Optional. Whether to use full size image. Default false. 1867 * @param array $max_dims Optional. Max image dimensions. 1868 * @param bool $permalink Optional. Whether to include permalink to image. Default false. 1869 * @return string 1870 */ 1871 function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false, $permalink = false) { 1872 _deprecated_function( __FUNCTION__, '2.5.0', 'wp_get_attachment_link()' ); 1873 $id = (int) $id; 1874 $_post = get_post($id); 1875 1876 if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) ) 1877 return __('Missing Attachment'); 1878 1879 if ( $permalink ) 1880 $url = get_attachment_link($_post->ID); 1881 1882 $post_title = esc_attr($_post->post_title); 1883 1884 $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); 1885 return "<a href='$url' title='$post_title'>$innerHTML</a>"; 1886 } 1887 1888 /** 1889 * Retrieve icon URL and Path. 1890 * 1891 * @since 2.1.0 1892 * @deprecated 2.5.0 Use wp_get_attachment_image_src() 1893 * @see wp_get_attachment_image_src() 1894 * 1895 * @param int $id Optional. Post ID. 1896 * @param bool $fullsize Optional. Whether to have full image. Default false. 1897 * @return array Icon URL and full path to file, respectively. 1898 */ 1899 function get_attachment_icon_src( $id = 0, $fullsize = false ) { 1900 _deprecated_function( __FUNCTION__, '2.5.0', 'wp_get_attachment_image_src()' ); 1901 $id = (int) $id; 1902 if ( !$post = get_post($id) ) 1903 return false; 1904 1905 $file = get_attached_file( $post->ID ); 1906 1907 if ( !$fullsize && $src = wp_get_attachment_thumb_url( $post->ID ) ) { 1908 // We have a thumbnail desired, specified and existing. 1909 1910 $src_file = wp_basename($src); 1911 } elseif ( wp_attachment_is_image( $post->ID ) ) { 1912 // We have an image without a thumbnail. 1913 1914 $src = wp_get_attachment_url( $post->ID ); 1915 $src_file = & $file; 1916 } elseif ( $src = wp_mime_type_icon( $post->ID, '.svg' ) ) { 1917 // No thumb, no image. We'll look for a mime-related icon instead. 1918 1919 /** This filter is documented in wp-includes/post.php */ 1920 $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); 1921 $src_file = $icon_dir . '/' . wp_basename($src); 1922 } 1923 1924 if ( !isset($src) || !$src ) 1925 return false; 1926 1927 return array($src, $src_file); 1928 } 1929 1930 /** 1931 * Retrieve HTML content of icon attachment image element. 1932 * 1933 * @since 2.0.0 1934 * @deprecated 2.5.0 Use wp_get_attachment_image() 1935 * @see wp_get_attachment_image() 1936 * 1937 * @param int $id Optional. Post ID. 1938 * @param bool $fullsize Optional. Whether to have full size image. Default false. 1939 * @param array $max_dims Optional. Dimensions of image. 1940 * @return string|false HTML content. 1941 */ 1942 function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) { 1943 _deprecated_function( __FUNCTION__, '2.5.0', 'wp_get_attachment_image()' ); 1944 $id = (int) $id; 1945 if ( !$post = get_post($id) ) 1946 return false; 1947 1948 if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) ) 1949 return false; 1950 1951 list($src, $src_file) = $src; 1952 1953 // Do we need to constrain the image? 1954 if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { 1955 1956 $imagesize = wp_getimagesize($src_file); 1957 1958 if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { 1959 $actual_aspect = $imagesize[0] / $imagesize[1]; 1960 $desired_aspect = $max_dims[0] / $max_dims[1]; 1961 1962 if ( $actual_aspect >= $desired_aspect ) { 1963 $height = $actual_aspect * $max_dims[0]; 1964 $constraint = "width='{$max_dims[0]}' "; 1965 $post->iconsize = array($max_dims[0], $height); 1966 } else { 1967 $width = $max_dims[1] / $actual_aspect; 1968 $constraint = "height='{$max_dims[1]}' "; 1969 $post->iconsize = array($width, $max_dims[1]); 1970 } 1971 } else { 1972 $post->iconsize = array($imagesize[0], $imagesize[1]); 1973 $constraint = ''; 1974 } 1975 } else { 1976 $constraint = ''; 1977 } 1978 1979 $post_title = esc_attr($post->post_title); 1980 1981 $icon = "<img src='$src' title='$post_title' alt='$post_title' $constraint/>"; 1982 1983 return apply_filters( 'attachment_icon', $icon, $post->ID ); 1984 } 1985 1986 /** 1987 * Retrieve HTML content of image element. 1988 * 1989 * @since 2.0.0 1990 * @deprecated 2.5.0 Use wp_get_attachment_image() 1991 * @see wp_get_attachment_image() 1992 * 1993 * @param int $id Optional. Post ID. 1994 * @param bool $fullsize Optional. Whether to have full size image. Default false. 1995 * @param array $max_dims Optional. Dimensions of image. 1996 * @return string|false 1997 */ 1998 function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { 1999 _deprecated_function( __FUNCTION__, '2.5.0', 'wp_get_attachment_image()' ); 2000 $id = (int) $id; 2001 if ( !$post = get_post($id) ) 2002 return false; 2003 2004 if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims)) 2005 return $innerHTML; 2006 2007 $innerHTML = esc_attr($post->post_title); 2008 2009 return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); 2010 } 2011 2012 /** 2013 * Retrieves bookmark data based on ID. 2014 * 2015 * @since 2.0.0 2016 * @deprecated 2.1.0 Use get_bookmark() 2017 * @see get_bookmark() 2018 * 2019 * @param int $bookmark_id ID of link 2020 * @param string $output Optional. Type of output. Accepts OBJECT, ARRAY_N, or ARRAY_A. 2021 * Default OBJECT. 2022 * @param string $filter Optional. How to filter the link for output. Accepts 'raw', 'edit', 2023 * 'attribute', 'js', 'db', or 'display'. Default 'raw'. 2024 * @return object|array Bookmark object or array, depending on the type specified by `$output`. 2025 */ 2026 function get_link( $bookmark_id, $output = OBJECT, $filter = 'raw' ) { 2027 _deprecated_function( __FUNCTION__, '2.1.0', 'get_bookmark()' ); 2028 return get_bookmark($bookmark_id, $output, $filter); 2029 } 2030 2031 /** 2032 * Checks and cleans a URL. 2033 * 2034 * A number of characters are removed from the URL. If the URL is for displaying 2035 * (the default behavior) ampersands are also replaced. The 'clean_url' filter 2036 * is applied to the returned cleaned URL. 2037 * 2038 * @since 1.2.0 2039 * @deprecated 3.0.0 Use esc_url() 2040 * @see esc_url() 2041 * 2042 * @param string $url The URL to be cleaned. 2043 * @param array $protocols Optional. An array of acceptable protocols. 2044 * @param string $context Optional. How the URL will be used. Default is 'display'. 2045 * @return string The cleaned $url after the {@see 'clean_url'} filter is applied. 2046 */ 2047 function clean_url( $url, $protocols = null, $context = 'display' ) { 2048 if ( $context == 'db' ) 2049 _deprecated_function( 'clean_url( $context = \'db\' )', '3.0.0', 'sanitize_url()' ); 2050 else 2051 _deprecated_function( __FUNCTION__, '3.0.0', 'esc_url()' ); 2052 return esc_url( $url, $protocols, $context ); 2053 } 2054 2055 /** 2056 * Escape single quotes, specialchar double quotes, and fix line endings. 2057 * 2058 * The filter {@see 'js_escape'} is also applied by esc_js(). 2059 * 2060 * @since 2.0.4 2061 * @deprecated 2.8.0 Use esc_js() 2062 * @see esc_js() 2063 * 2064 * @param string $text The text to be escaped. 2065 * @return string Escaped text. 2066 */ 2067 function js_escape( $text ) { 2068 _deprecated_function( __FUNCTION__, '2.8.0', 'esc_js()' ); 2069 return esc_js( $text ); 2070 } 2071 2072 /** 2073 * Legacy escaping for HTML blocks. 2074 * 2075 * @deprecated 2.8.0 Use esc_html() 2076 * @see esc_html() 2077 * 2078 * @param string $text Text to escape. 2079 * @param string $quote_style Unused. 2080 * @param false|string $charset Unused. 2081 * @param false $double_encode Whether to double encode. Unused. 2082 * @return string Escaped `$text`. 2083 */ 2084 function wp_specialchars( $text, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) { 2085 _deprecated_function( __FUNCTION__, '2.8.0', 'esc_html()' ); 2086 if ( func_num_args() > 1 ) { // Maintain back-compat for people passing additional arguments. 2087 return _wp_specialchars( $text, $quote_style, $charset, $double_encode ); 2088 } else { 2089 return esc_html( $text ); 2090 } 2091 } 2092 2093 /** 2094 * Escaping for HTML attributes. 2095 * 2096 * @since 2.0.6 2097 * @deprecated 2.8.0 Use esc_attr() 2098 * @see esc_attr() 2099 * 2100 * @param string $text 2101 * @return string 2102 */ 2103 function attribute_escape( $text ) { 2104 _deprecated_function( __FUNCTION__, '2.8.0', 'esc_attr()' ); 2105 return esc_attr( $text ); 2106 } 2107 2108 /** 2109 * Register widget for sidebar with backward compatibility. 2110 * 2111 * Allows $name to be an array that accepts either three elements to grab the 2112 * first element and the third for the name or just uses the first element of 2113 * the array for the name. 2114 * 2115 * Passes to wp_register_sidebar_widget() after argument list and backward 2116 * compatibility is complete. 2117 * 2118 * @since 2.2.0 2119 * @deprecated 2.8.0 Use wp_register_sidebar_widget() 2120 * @see wp_register_sidebar_widget() 2121 * 2122 * @param string|int $name Widget ID. 2123 * @param callable $output_callback Run when widget is called. 2124 * @param string $classname Optional. Classname widget option. Default empty. 2125 * @param mixed ...$params Widget parameters. 2126 */ 2127 function register_sidebar_widget($name, $output_callback, $classname = '', ...$params) { 2128 _deprecated_function( __FUNCTION__, '2.8.0', 'wp_register_sidebar_widget()' ); 2129 // Compat. 2130 if ( is_array( $name ) ) { 2131 if ( count( $name ) === 3 ) { 2132 $name = sprintf( $name[0], $name[2] ); 2133 } else { 2134 $name = $name[0]; 2135 } 2136 } 2137 2138 $id = sanitize_title( $name ); 2139 $options = array(); 2140 if ( ! empty( $classname ) && is_string( $classname ) ) { 2141 $options['classname'] = $classname; 2142 } 2143 2144 wp_register_sidebar_widget( $id, $name, $output_callback, $options, ...$params ); 2145 } 2146 2147 /** 2148 * Serves as an alias of wp_unregister_sidebar_widget(). 2149 * 2150 * @since 2.2.0 2151 * @deprecated 2.8.0 Use wp_unregister_sidebar_widget() 2152 * @see wp_unregister_sidebar_widget() 2153 * 2154 * @param int|string $id Widget ID. 2155 */ 2156 function unregister_sidebar_widget($id) { 2157 _deprecated_function( __FUNCTION__, '2.8.0', 'wp_unregister_sidebar_widget()' ); 2158 return wp_unregister_sidebar_widget($id); 2159 } 2160 2161 /** 2162 * Registers widget control callback for customizing options. 2163 * 2164 * Allows $name to be an array that accepts either three elements to grab the 2165 * first element and the third for the name or just uses the first element of 2166 * the array for the name. 2167 * 2168 * Passes to wp_register_widget_control() after the argument list has 2169 * been compiled. 2170 * 2171 * @since 2.2.0 2172 * @deprecated 2.8.0 Use wp_register_widget_control() 2173 * @see wp_register_widget_control() 2174 * 2175 * @param int|string $name Sidebar ID. 2176 * @param callable $control_callback Widget control callback to display and process form. 2177 * @param int $width Widget width. 2178 * @param int $height Widget height. 2179 * @param mixed ...$params Widget parameters. 2180 */ 2181 function register_widget_control($name, $control_callback, $width = '', $height = '', ...$params) { 2182 _deprecated_function( __FUNCTION__, '2.8.0', 'wp_register_widget_control()' ); 2183 // Compat. 2184 if ( is_array( $name ) ) { 2185 if ( count( $name ) === 3 ) { 2186 $name = sprintf( $name[0], $name[2] ); 2187 } else { 2188 $name = $name[0]; 2189 } 2190 } 2191 2192 $id = sanitize_title( $name ); 2193 $options = array(); 2194 if ( ! empty( $width ) ) { 2195 $options['width'] = $width; 2196 } 2197 if ( ! empty( $height ) ) { 2198 $options['height'] = $height; 2199 } 2200 2201 wp_register_widget_control( $id, $name, $control_callback, $options, ...$params ); 2202 } 2203 2204 /** 2205 * Alias of wp_unregister_widget_control(). 2206 * 2207 * @since 2.2.0 2208 * @deprecated 2.8.0 Use wp_unregister_widget_control() 2209 * @see wp_unregister_widget_control() 2210 * 2211 * @param int|string $id Widget ID. 2212 */ 2213 function unregister_widget_control($id) { 2214 _deprecated_function( __FUNCTION__, '2.8.0', 'wp_unregister_widget_control()' ); 2215 return wp_unregister_widget_control($id); 2216 } 2217 2218 /** 2219 * Remove user meta data. 2220 * 2221 * @since 2.0.0 2222 * @deprecated 3.0.0 Use delete_user_meta() 2223 * @see delete_user_meta() 2224 * 2225 * @global wpdb $wpdb WordPress database abstraction object. 2226 * 2227 * @param int $user_id User ID. 2228 * @param string $meta_key Metadata key. 2229 * @param mixed $meta_value Optional. Metadata value. Default empty. 2230 * @return bool True deletion completed and false if user_id is not a number. 2231 */ 2232 function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) { 2233 _deprecated_function( __FUNCTION__, '3.0.0', 'delete_user_meta()' ); 2234 global $wpdb; 2235 if ( !is_numeric( $user_id ) ) 2236 return false; 2237 $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); 2238 2239 if ( is_array($meta_value) || is_object($meta_value) ) 2240 $meta_value = serialize($meta_value); 2241 $meta_value = trim( $meta_value ); 2242 2243 $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); 2244 2245 if ( $cur && $cur->umeta_id ) 2246 do_action( 'delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); 2247 2248 if ( ! empty($meta_value) ) 2249 $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $meta_value) ); 2250 else 2251 $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); 2252 2253 clean_user_cache( $user_id ); 2254 wp_cache_delete( $user_id, 'user_meta' ); 2255 2256 if ( $cur && $cur->umeta_id ) 2257 do_action( 'deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); 2258 2259 return true; 2260 } 2261 2262 /** 2263 * Retrieve user metadata. 2264 * 2265 * If $user_id is not a number, then the function will fail over with a 'false' 2266 * boolean return value. Other returned values depend on whether there is only 2267 * one item to be returned, which be that single item type. If there is more 2268 * than one metadata value, then it will be list of metadata values. 2269 * 2270 * @since 2.0.0 2271 * @deprecated 3.0.0 Use get_user_meta() 2272 * @see get_user_meta() 2273 * 2274 * @global wpdb $wpdb WordPress database abstraction object. 2275 * 2276 * @param int $user_id User ID 2277 * @param string $meta_key Optional. Metadata key. Default empty. 2278 * @return mixed 2279 */ 2280 function get_usermeta( $user_id, $meta_key = '' ) { 2281 _deprecated_function( __FUNCTION__, '3.0.0', 'get_user_meta()' ); 2282 global $wpdb; 2283 $user_id = (int) $user_id; 2284 2285 if ( !$user_id ) 2286 return false; 2287 2288 if ( !empty($meta_key) ) { 2289 $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); 2290 $user = wp_cache_get($user_id, 'users'); 2291 // Check the cached user object. 2292 if ( false !== $user && isset($user->$meta_key) ) 2293 $metas = array($user->$meta_key); 2294 else 2295 $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); 2296 } else { 2297 $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d", $user_id) ); 2298 } 2299 2300 if ( empty($metas) ) { 2301 if ( empty($meta_key) ) 2302 return array(); 2303 else 2304 return ''; 2305 } 2306 2307 $metas = array_map('maybe_unserialize', $metas); 2308 2309 if ( count($metas) === 1 ) 2310 return $metas[0]; 2311 else 2312 return $metas; 2313 } 2314 2315 /** 2316 * Update metadata of user. 2317 * 2318 * There is no need to serialize values, they will be serialized if it is 2319 * needed. The metadata key can only be a string with underscores. All else will 2320 * be removed. 2321 * 2322 * Will remove the metadata, if the meta value is empty. 2323 * 2324 * @since 2.0.0 2325 * @deprecated 3.0.0 Use update_user_meta() 2326 * @see update_user_meta() 2327 * 2328 * @global wpdb $wpdb WordPress database abstraction object. 2329 * 2330 * @param int $user_id User ID 2331 * @param string $meta_key Metadata key. 2332 * @param mixed $meta_value Metadata value. 2333 * @return bool True on successful update, false on failure. 2334 */ 2335 function update_usermeta( $user_id, $meta_key, $meta_value ) { 2336 _deprecated_function( __FUNCTION__, '3.0.0', 'update_user_meta()' ); 2337 global $wpdb; 2338 if ( !is_numeric( $user_id ) ) 2339 return false; 2340 $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); 2341 2342 /** @todo Might need fix because usermeta data is assumed to be already escaped */ 2343 if ( is_string($meta_value) ) 2344 $meta_value = stripslashes($meta_value); 2345 $meta_value = maybe_serialize($meta_value); 2346 2347 if (empty($meta_value)) { 2348 return delete_usermeta($user_id, $meta_key); 2349 } 2350 2351 $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); 2352 2353 if ( $cur ) 2354 do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); 2355 2356 if ( !$cur ) 2357 $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') ); 2358 elseif ( $cur->meta_value != $meta_value ) 2359 $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') ); 2360 else 2361 return false; 2362 2363 clean_user_cache( $user_id ); 2364 wp_cache_delete( $user_id, 'user_meta' ); 2365 2366 if ( !$cur ) 2367 do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value ); 2368 else 2369 do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); 2370 2371 return true; 2372 } 2373 2374 /** 2375 * Get users for the site. 2376 * 2377 * For setups that use the multisite feature. Can be used outside of the 2378 * multisite feature. 2379 * 2380 * @since 2.2.0 2381 * @deprecated 3.1.0 Use get_users() 2382 * @see get_users() 2383 * 2384 * @global wpdb $wpdb WordPress database abstraction object. 2385 * 2386 * @param int $id Site ID. 2387 * @return array List of users that are part of that site ID 2388 */ 2389 function get_users_of_blog( $id = '' ) { 2390 _deprecated_function( __FUNCTION__, '3.1.0', 'get_users()' ); 2391 2392 global $wpdb; 2393 if ( empty( $id ) ) { 2394 $id = get_current_blog_id(); 2395 } 2396 $blog_prefix = $wpdb->get_blog_prefix($id); 2397 $users = $wpdb->get_results( "SELECT user_id, user_id AS ID, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE {$wpdb->users}.ID = {$wpdb->usermeta}.user_id AND meta_key = '{$blog_prefix}capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); 2398 return $users; 2399 } 2400 2401 /** 2402 * Enable/disable automatic general feed link outputting. 2403 * 2404 * @since 2.8.0 2405 * @deprecated 3.0.0 Use add_theme_support() 2406 * @see add_theme_support() 2407 * 2408 * @param bool $add Optional. Add or remove links. Default true. 2409 */ 2410 function automatic_feed_links( $add = true ) { 2411 _deprecated_function( __FUNCTION__, '3.0.0', "add_theme_support( 'automatic-feed-links' )" ); 2412 2413 if ( $add ) 2414 add_theme_support( 'automatic-feed-links' ); 2415 else 2416 remove_action( 'wp_head', 'feed_links_extra', 3 ); // Just do this yourself in 3.0+. 2417 } 2418 2419 /** 2420 * Retrieve user data based on field. 2421 * 2422 * @since 1.5.0 2423 * @deprecated 3.0.0 Use get_the_author_meta() 2424 * @see get_the_author_meta() 2425 * 2426 * @param string $field User meta field. 2427 * @param false|int $user Optional. User ID to retrieve the field for. Default false (current user). 2428 * @return string The author's field from the current author's DB object. 2429 */ 2430 function get_profile( $field, $user = false ) { 2431 _deprecated_function( __FUNCTION__, '3.0.0', 'get_the_author_meta()' ); 2432 if ( $user ) { 2433 $user = get_user_by( 'login', $user ); 2434 $user = $user->ID; 2435 } 2436 return get_the_author_meta( $field, $user ); 2437 } 2438 2439 /** 2440 * Retrieves the number of posts a user has written. 2441 * 2442 * @since 0.71 2443 * @deprecated 3.0.0 Use count_user_posts() 2444 * @see count_user_posts() 2445 * 2446 * @param int $userid User to count posts for. 2447 * @return int Number of posts the given user has written. 2448 */ 2449 function get_usernumposts( $userid ) { 2450 _deprecated_function( __FUNCTION__, '3.0.0', 'count_user_posts()' ); 2451 return count_user_posts( $userid ); 2452 } 2453 2454 /** 2455 * Callback used to change %uXXXX to &#YYY; syntax 2456 * 2457 * @since 2.8.0 2458 * @access private 2459 * @deprecated 3.0.0 2460 * 2461 * @param array $matches Single Match 2462 * @return string An HTML entity 2463 */ 2464 function funky_javascript_callback($matches) { 2465 return "&#".base_convert($matches[1],16,10).";"; 2466 } 2467 2468 /** 2469 * Fixes JavaScript bugs in browsers. 2470 * 2471 * Converts unicode characters to HTML numbered entities. 2472 * 2473 * @since 1.5.0 2474 * @deprecated 3.0.0 2475 * 2476 * @global $is_macIE 2477 * @global $is_winIE 2478 * 2479 * @param string $text Text to be made safe. 2480 * @return string Fixed text. 2481 */ 2482 function funky_javascript_fix($text) { 2483 _deprecated_function( __FUNCTION__, '3.0.0' ); 2484 // Fixes for browsers' JavaScript bugs. 2485 global $is_macIE, $is_winIE; 2486 2487 if ( $is_winIE || $is_macIE ) 2488 $text = preg_replace_callback("/\%u([0-9A-F]{4,4})/", 2489 "funky_javascript_callback", 2490 $text); 2491 2492 return $text; 2493 } 2494 2495 /** 2496 * Checks that the taxonomy name exists. 2497 * 2498 * @since 2.3.0 2499 * @deprecated 3.0.0 Use taxonomy_exists() 2500 * @see taxonomy_exists() 2501 * 2502 * @param string $taxonomy Name of taxonomy object 2503 * @return bool Whether the taxonomy exists. 2504 */ 2505 function is_taxonomy( $taxonomy ) { 2506 _deprecated_function( __FUNCTION__, '3.0.0', 'taxonomy_exists()' ); 2507 return taxonomy_exists( $taxonomy ); 2508 } 2509 2510 /** 2511 * Check if Term exists. 2512 * 2513 * @since 2.3.0 2514 * @deprecated 3.0.0 Use term_exists() 2515 * @see term_exists() 2516 * 2517 * @param int|string $term The term to check 2518 * @param string $taxonomy The taxonomy name to use 2519 * @param int $parent ID of parent term under which to confine the exists search. 2520 * @return mixed Get the term ID or term object, if exists. 2521 */ 2522 function is_term( $term, $taxonomy = '', $parent = 0 ) { 2523 _deprecated_function( __FUNCTION__, '3.0.0', 'term_exists()' ); 2524 return term_exists( $term, $taxonomy, $parent ); 2525 } 2526 2527 /** 2528 * Determines whether the current admin page is generated by a plugin. 2529 * 2530 * Use global $plugin_page and/or get_plugin_page_hookname() hooks. 2531 * 2532 * For more information on this and similar theme functions, check out 2533 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ 2534 * Conditional Tags} article in the Theme Developer Handbook. 2535 * 2536 * @since 1.5.0 2537 * @deprecated 3.1.0 2538 * 2539 * @global $plugin_page 2540 * 2541 * @return bool 2542 */ 2543 function is_plugin_page() { 2544 _deprecated_function( __FUNCTION__, '3.1.0' ); 2545 2546 global $plugin_page; 2547 2548 if ( isset($plugin_page) ) 2549 return true; 2550 2551 return false; 2552 } 2553 2554 /** 2555 * Update the categories cache. 2556 * 2557 * This function does not appear to be used anymore or does not appear to be 2558 * needed. It might be a legacy function left over from when there was a need 2559 * for updating the category cache. 2560 * 2561 * @since 1.5.0 2562 * @deprecated 3.1.0 2563 * 2564 * @return bool Always return True 2565 */ 2566 function update_category_cache() { 2567 _deprecated_function( __FUNCTION__, '3.1.0' ); 2568 2569 return true; 2570 } 2571 2572 /** 2573 * Check for PHP timezone support 2574 * 2575 * @since 2.9.0 2576 * @deprecated 3.2.0 2577 * 2578 * @return bool 2579 */ 2580 function wp_timezone_supported() { 2581 _deprecated_function( __FUNCTION__, '3.2.0' ); 2582 2583 return true; 2584 } 2585 2586 /** 2587 * Displays an editor: TinyMCE, HTML, or both. 2588 * 2589 * @since 2.1.0 2590 * @deprecated 3.3.0 Use wp_editor() 2591 * @see wp_editor() 2592 * 2593 * @param string $content Textarea content. 2594 * @param string $id Optional. HTML ID attribute value. Default 'content'. 2595 * @param string $prev_id Optional. Unused. 2596 * @param bool $media_buttons Optional. Whether to display media buttons. Default true. 2597 * @param int $tab_index Optional. Unused. 2598 * @param bool $extended Optional. Unused. 2599 */ 2600 function the_editor($content, $id = 'content', $prev_id = 'title', $media_buttons = true, $tab_index = 2, $extended = true) { 2601 _deprecated_function( __FUNCTION__, '3.3.0', 'wp_editor()' ); 2602 2603 wp_editor( $content, $id, array( 'media_buttons' => $media_buttons ) ); 2604 } 2605 2606 /** 2607 * Perform the query to get the $metavalues array(s) needed by _fill_user and _fill_many_users 2608 * 2609 * @since 3.0.0 2610 * @deprecated 3.3.0 2611 * 2612 * @param array $ids User ID numbers list. 2613 * @return array of arrays. The array is indexed by user_id, containing $metavalues object arrays. 2614 */ 2615 function get_user_metavalues($ids) { 2616 _deprecated_function( __FUNCTION__, '3.3.0' ); 2617 2618 $objects = array(); 2619 2620 $ids = array_map('intval', $ids); 2621 foreach ( $ids as $id ) 2622 $objects[$id] = array(); 2623 2624 $metas = update_meta_cache('user', $ids); 2625 2626 foreach ( $metas as $id => $meta ) { 2627 foreach ( $meta as $key => $metavalues ) { 2628 foreach ( $metavalues as $value ) { 2629 $objects[$id][] = (object)array( 'user_id' => $id, 'meta_key' => $key, 'meta_value' => $value); 2630 } 2631 } 2632 } 2633 2634 return $objects; 2635 } 2636 2637 /** 2638 * Sanitize every user field. 2639 * 2640 * If the context is 'raw', then the user object or array will get minimal sanitization of the int fields. 2641 * 2642 * @since 2.3.0 2643 * @deprecated 3.3.0 2644 * 2645 * @param object|array $user The user object or array. 2646 * @param string $context Optional. How to sanitize user fields. Default 'display'. 2647 * @return object|array The now sanitized user object or array (will be the same type as $user). 2648 */ 2649 function sanitize_user_object($user, $context = 'display') { 2650 _deprecated_function( __FUNCTION__, '3.3.0' ); 2651 2652 if ( is_object($user) ) { 2653 if ( !isset($user->ID) ) 2654 $user->ID = 0; 2655 if ( ! ( $user instanceof WP_User ) ) { 2656 $vars = get_object_vars($user); 2657 foreach ( array_keys($vars) as $field ) { 2658 if ( is_string($user->$field) || is_numeric($user->$field) ) 2659 $user->$field = sanitize_user_field($field, $user->$field, $user->ID, $context); 2660 } 2661 } 2662 $user->filter = $context; 2663 } else { 2664 if ( !isset($user['ID']) ) 2665 $user['ID'] = 0; 2666 foreach ( array_keys($user) as $field ) 2667 $user[$field] = sanitize_user_field($field, $user[$field], $user['ID'], $context); 2668 $user['filter'] = $context; 2669 } 2670 2671 return $user; 2672 } 2673 2674 /** 2675 * Get boundary post relational link. 2676 * 2677 * Can either be start or end post relational link. 2678 * 2679 * @since 2.8.0 2680 * @deprecated 3.3.0 2681 * 2682 * @param string $title Optional. Link title format. Default '%title'. 2683 * @param bool $in_same_cat Optional. Whether link should be in a same category. 2684 * Default false. 2685 * @param string $excluded_categories Optional. Excluded categories IDs. Default empty. 2686 * @param bool $start Optional. Whether to display link to first or last post. 2687 * Default true. 2688 * @return string 2689 */ 2690 function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $start = true) { 2691 _deprecated_function( __FUNCTION__, '3.3.0' ); 2692 2693 $posts = get_boundary_post($in_same_cat, $excluded_categories, $start); 2694 // If there is no post, stop. 2695 if ( empty($posts) ) 2696 return; 2697 2698 // Even though we limited get_posts() to return only 1 item it still returns an array of objects. 2699 $post = $posts[0]; 2700 2701 if ( empty($post->post_title) ) 2702 $post->post_title = $start ? __('First Post') : __('Last Post'); 2703 2704 $date = mysql2date(get_option('date_format'), $post->post_date); 2705 2706 $title = str_replace('%title', $post->post_title, $title); 2707 $title = str_replace('%date', $date, $title); 2708 /** This filter is documented in wp-includes/post-template.php */ 2709 $title = apply_filters('the_title', $title, $post->ID); 2710 2711 $link = $start ? "<link rel='start' title='" : "<link rel='end' title='"; 2712 $link .= esc_attr($title); 2713 $link .= "' href='" . get_permalink($post) . "' />\n"; 2714 2715 $boundary = $start ? 'start' : 'end'; 2716 return apply_filters( "{$boundary}_post_rel_link", $link ); 2717 } 2718 2719 /** 2720 * Display relational link for the first post. 2721 * 2722 * @since 2.8.0 2723 * @deprecated 3.3.0 2724 * 2725 * @param string $title Optional. Link title format. 2726 * @param bool $in_same_cat Optional. Whether link should be in a same category. 2727 * @param string $excluded_categories Optional. Excluded categories IDs. 2728 */ 2729 function start_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { 2730 _deprecated_function( __FUNCTION__, '3.3.0' ); 2731 2732 echo get_boundary_post_rel_link($title, $in_same_cat, $excluded_categories, true); 2733 } 2734 2735 /** 2736 * Get site index relational link. 2737 * 2738 * @since 2.8.0 2739 * @deprecated 3.3.0 2740 * 2741 * @return string 2742 */ 2743 function get_index_rel_link() { 2744 _deprecated_function( __FUNCTION__, '3.3.0' ); 2745 2746 $link = "<link rel='index' title='" . esc_attr( get_bloginfo( 'name', 'display' ) ) . "' href='" . esc_url( user_trailingslashit( get_bloginfo( 'url', 'display' ) ) ) . "' />\n"; 2747 return apply_filters( "index_rel_link", $link ); 2748 } 2749 2750 /** 2751 * Display relational link for the site index. 2752 * 2753 * @since 2.8.0 2754 * @deprecated 3.3.0 2755 */ 2756 function index_rel_link() { 2757 _deprecated_function( __FUNCTION__, '3.3.0' ); 2758 2759 echo get_index_rel_link(); 2760 } 2761 2762 /** 2763 * Get parent post relational link. 2764 * 2765 * @since 2.8.0 2766 * @deprecated 3.3.0 2767 * 2768 * @global WP_Post $post Global post object. 2769 * 2770 * @param string $title Optional. Link title format. Default '%title'. 2771 * @return string 2772 */ 2773 function get_parent_post_rel_link( $title = '%title' ) { 2774 _deprecated_function( __FUNCTION__, '3.3.0' ); 2775 2776 if ( ! empty( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->post_parent ) ) 2777 $post = get_post($GLOBALS['post']->post_parent); 2778 2779 if ( empty($post) ) 2780 return; 2781 2782 $date = mysql2date(get_option('date_format'), $post->post_date); 2783 2784 $title = str_replace('%title', $post->post_title, $title); 2785 $title = str_replace('%date', $date, $title); 2786 /** This filter is documented in wp-includes/post-template.php */ 2787 $title = apply_filters('the_title', $title, $post->ID); 2788 2789 $link = "<link rel='up' title='"; 2790 $link .= esc_attr( $title ); 2791 $link .= "' href='" . get_permalink($post) . "' />\n"; 2792 2793 return apply_filters( "parent_post_rel_link", $link ); 2794 } 2795 2796 /** 2797 * Display relational link for parent item 2798 * 2799 * @since 2.8.0 2800 * @deprecated 3.3.0 2801 * 2802 * @param string $title Optional. Link title format. Default '%title'. 2803 */ 2804 function parent_post_rel_link( $title = '%title' ) { 2805 _deprecated_function( __FUNCTION__, '3.3.0' ); 2806 2807 echo get_parent_post_rel_link($title); 2808 } 2809 2810 /** 2811 * Add the "Dashboard"/"Visit Site" menu. 2812 * 2813 * @since 3.2.0 2814 * @deprecated 3.3.0 2815 * 2816 * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance. 2817 */ 2818 function wp_admin_bar_dashboard_view_site_menu( $wp_admin_bar ) { 2819 _deprecated_function( __FUNCTION__, '3.3.0' ); 2820 2821 $user_id = get_current_user_id(); 2822 2823 if ( 0 != $user_id ) { 2824 if ( is_admin() ) 2825 $wp_admin_bar->add_menu( array( 'id' => 'view-site', 'title' => __( 'Visit Site' ), 'href' => home_url() ) ); 2826 elseif ( is_multisite() ) 2827 $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => get_dashboard_url( $user_id ) ) ); 2828 else 2829 $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => admin_url() ) ); 2830 } 2831 } 2832 2833 /** 2834 * Checks if the current user belong to a given site. 2835 * 2836 * @since MU (3.0.0) 2837 * @deprecated 3.3.0 Use is_user_member_of_blog() 2838 * @see is_user_member_of_blog() 2839 * 2840 * @param int $blog_id Site ID 2841 * @return bool True if the current users belong to $blog_id, false if not. 2842 */ 2843 function is_blog_user( $blog_id = 0 ) { 2844 _deprecated_function( __FUNCTION__, '3.3.0', 'is_user_member_of_blog()' ); 2845 2846 return is_user_member_of_blog( get_current_user_id(), $blog_id ); 2847 } 2848 2849 /** 2850 * Open the file handle for debugging. 2851 * 2852 * @since 0.71 2853 * @deprecated 3.4.0 Use error_log() 2854 * @see error_log() 2855 * 2856 * @link https://www.php.net/manual/en/function.error-log.php 2857 * 2858 * @param string $filename File name. 2859 * @param string $mode Type of access you required to the stream. 2860 * @return false Always false. 2861 */ 2862 function debug_fopen( $filename, $mode ) { 2863 _deprecated_function( __FUNCTION__, '3.4.0', 'error_log()' ); 2864 return false; 2865 } 2866 2867 /** 2868 * Write contents to the file used for debugging. 2869 * 2870 * @since 0.71 2871 * @deprecated 3.4.0 Use error_log() 2872 * @see error_log() 2873 * 2874 * @link https://www.php.net/manual/en/function.error-log.php 2875 * 2876 * @param mixed $fp Unused. 2877 * @param string $message Message to log. 2878 */ 2879 function debug_fwrite( $fp, $message ) { 2880 _deprecated_function( __FUNCTION__, '3.4.0', 'error_log()' ); 2881 if ( ! empty( $GLOBALS['debug'] ) ) 2882 error_log( $message ); 2883 } 2884 2885 /** 2886 * Close the debugging file handle. 2887 * 2888 * @since 0.71 2889 * @deprecated 3.4.0 Use error_log() 2890 * @see error_log() 2891 * 2892 * @link https://www.php.net/manual/en/function.error-log.php 2893 * 2894 * @param mixed $fp Unused. 2895 */ 2896 function debug_fclose( $fp ) { 2897 _deprecated_function( __FUNCTION__, '3.4.0', 'error_log()' ); 2898 } 2899 2900 /** 2901 * Retrieve list of themes with theme data in theme directory. 2902 * 2903 * The theme is broken, if it doesn't have a parent theme and is missing either 2904 * style.css and, or index.php. If the theme has a parent theme then it is 2905 * broken, if it is missing style.css; index.php is optional. 2906 * 2907 * @since 1.5.0 2908 * @deprecated 3.4.0 Use wp_get_themes() 2909 * @see wp_get_themes() 2910 * 2911 * @return array Theme list with theme data. 2912 */ 2913 function get_themes() { 2914 _deprecated_function( __FUNCTION__, '3.4.0', 'wp_get_themes()' ); 2915 2916 global $wp_themes; 2917 if ( isset( $wp_themes ) ) 2918 return $wp_themes; 2919 2920 $themes = wp_get_themes(); 2921 $wp_themes = array(); 2922 2923 foreach ( $themes as $theme ) { 2924 $name = $theme->get('Name'); 2925 if ( isset( $wp_themes[ $name ] ) ) 2926 $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme; 2927 else 2928 $wp_themes[ $name ] = $theme; 2929 } 2930 2931 return $wp_themes; 2932 } 2933 2934 /** 2935 * Retrieve theme data. 2936 * 2937 * @since 1.5.0 2938 * @deprecated 3.4.0 Use wp_get_theme() 2939 * @see wp_get_theme() 2940 * 2941 * @param string $theme Theme name. 2942 * @return array|null Null, if theme name does not exist. Theme data, if exists. 2943 */ 2944 function get_theme( $theme ) { 2945 _deprecated_function( __FUNCTION__, '3.4.0', 'wp_get_theme( $stylesheet )' ); 2946 2947 $themes = get_themes(); 2948 if ( is_array( $themes ) && array_key_exists( $theme, $themes ) ) 2949 return $themes[ $theme ]; 2950 return null; 2951 } 2952 2953 /** 2954 * Retrieve current theme name. 2955 * 2956 * @since 1.5.0 2957 * @deprecated 3.4.0 Use wp_get_theme() 2958 * @see wp_get_theme() 2959 * 2960 * @return string 2961 */ 2962 function get_current_theme() { 2963 _deprecated_function( __FUNCTION__, '3.4.0', 'wp_get_theme()' ); 2964 2965 if ( $theme = get_option( 'current_theme' ) ) 2966 return $theme; 2967 2968 return wp_get_theme()->get('Name'); 2969 } 2970 2971 /** 2972 * Accepts matches array from preg_replace_callback in wpautop() or a string. 2973 * 2974 * Ensures that the contents of a `<pre>...</pre>` HTML block are not 2975 * converted into paragraphs or line breaks. 2976 * 2977 * @since 1.2.0 2978 * @deprecated 3.4.0 2979 * 2980 * @param array|string $matches The array or string 2981 * @return string The pre block without paragraph/line break conversion. 2982 */ 2983 function clean_pre($matches) { 2984 _deprecated_function( __FUNCTION__, '3.4.0' ); 2985 2986 if ( is_array($matches) ) 2987 $text = $matches[1] . $matches[2] . "</pre>"; 2988 else 2989 $text = $matches; 2990 2991 $text = str_replace(array('<br />', '<br/>', '<br>'), array('', '', ''), $text); 2992 $text = str_replace('<p>', "\n", $text); 2993 $text = str_replace('</p>', '', $text); 2994 2995 return $text; 2996 } 2997 2998 2999 /** 3000 * Add callbacks for image header display. 3001 * 3002 * @since 2.1.0 3003 * @deprecated 3.4.0 Use add_theme_support() 3004 * @see add_theme_support() 3005 * 3006 * @param callable $wp_head_callback Call on the {@see 'wp_head'} action. 3007 * @param callable $admin_head_callback Call on custom header administration screen. 3008 * @param callable $admin_preview_callback Output a custom header image div on the custom header administration screen. Optional. 3009 */ 3010 function add_custom_image_header( $wp_head_callback, $admin_head_callback, $admin_preview_callback = '' ) { 3011 _deprecated_function( __FUNCTION__, '3.4.0', 'add_theme_support( \'custom-header\', $args )' ); 3012 $args = array( 3013 'wp-head-callback' => $wp_head_callback, 3014 'admin-head-callback' => $admin_head_callback, 3015 ); 3016 if ( $admin_preview_callback ) 3017 $args['admin-preview-callback'] = $admin_preview_callback; 3018 return add_theme_support( 'custom-header', $args ); 3019 } 3020 3021 /** 3022 * Remove image header support. 3023 * 3024 * @since 3.1.0 3025 * @deprecated 3.4.0 Use remove_theme_support() 3026 * @see remove_theme_support() 3027 * 3028 * @return null|bool Whether support was removed. 3029 */ 3030 function remove_custom_image_header() { 3031 _deprecated_function( __FUNCTION__, '3.4.0', 'remove_theme_support( \'custom-header\' )' ); 3032 return remove_theme_support( 'custom-header' ); 3033 } 3034 3035 /** 3036 * Add callbacks for background image display. 3037 * 3038 * @since 3.0.0 3039 * @deprecated 3.4.0 Use add_theme_support() 3040 * @see add_theme_support() 3041 * 3042 * @param callable $wp_head_callback Call on the {@see 'wp_head'} action. 3043 * @param callable $admin_head_callback Call on custom background administration screen. 3044 * @param callable $admin_preview_callback Output a custom background image div on the custom background administration screen. Optional. 3045 */ 3046 function add_custom_background( $wp_head_callback = '', $admin_head_callback = '', $admin_preview_callback = '' ) { 3047 _deprecated_function( __FUNCTION__, '3.4.0', 'add_theme_support( \'custom-background\', $args )' ); 3048 $args = array(); 3049 if ( $wp_head_callback ) 3050 $args['wp-head-callback'] = $wp_head_callback; 3051 if ( $admin_head_callback ) 3052 $args['admin-head-callback'] = $admin_head_callback; 3053 if ( $admin_preview_callback ) 3054 $args['admin-preview-callback'] = $admin_preview_callback; 3055 return add_theme_support( 'custom-background', $args ); 3056 } 3057 3058 /** 3059 * Remove custom background support. 3060 * 3061 * @since 3.1.0 3062 * @deprecated 3.4.0 Use add_custom_background() 3063 * @see add_custom_background() 3064 * 3065 * @return null|bool Whether support was removed. 3066 */ 3067 function remove_custom_background() { 3068 _deprecated_function( __FUNCTION__, '3.4.0', 'remove_theme_support( \'custom-background\' )' ); 3069 return remove_theme_support( 'custom-background' ); 3070 } 3071 3072 /** 3073 * Retrieve theme data from parsed theme file. 3074 * 3075 * @since 1.5.0 3076 * @deprecated 3.4.0 Use wp_get_theme() 3077 * @see wp_get_theme() 3078 * 3079 * @param string $theme_file Theme file path. 3080 * @return array Theme data. 3081 */ 3082 function get_theme_data( $theme_file ) { 3083 _deprecated_function( __FUNCTION__, '3.4.0', 'wp_get_theme()' ); 3084 $theme = new WP_Theme( wp_basename( dirname( $theme_file ) ), dirname( dirname( $theme_file ) ) ); 3085 3086 $theme_data = array( 3087 'Name' => $theme->get('Name'), 3088 'URI' => $theme->display('ThemeURI', true, false), 3089 'Description' => $theme->display('Description', true, false), 3090 'Author' => $theme->display('Author', true, false), 3091 'AuthorURI' => $theme->display('AuthorURI', true, false), 3092 'Version' => $theme->get('Version'), 3093 'Template' => $theme->get('Template'), 3094 'Status' => $theme->get('Status'), 3095 'Tags' => $theme->get('Tags'), 3096 'Title' => $theme->get('Name'), 3097 'AuthorName' => $theme->get('Author'), 3098 ); 3099 3100 foreach ( apply_filters( 'extra_theme_headers', array() ) as $extra_header ) { 3101 if ( ! isset( $theme_data[ $extra_header ] ) ) 3102 $theme_data[ $extra_header ] = $theme->get( $extra_header ); 3103 } 3104 3105 return $theme_data; 3106 } 3107 3108 /** 3109 * Alias of update_post_cache(). 3110 * 3111 * @see update_post_cache() Posts and pages are the same, alias is intentional 3112 * 3113 * @since 1.5.1 3114 * @deprecated 3.4.0 Use update_post_cache() 3115 * @see update_post_cache() 3116 * 3117 * @param array $pages list of page objects 3118 */ 3119 function update_page_cache( &$pages ) { 3120 _deprecated_function( __FUNCTION__, '3.4.0', 'update_post_cache()' ); 3121 3122 update_post_cache( $pages ); 3123 } 3124 3125 /** 3126 * Will clean the page in the cache. 3127 * 3128 * Clean (read: delete) page from cache that matches $id. Will also clean cache 3129 * associated with 'all_page_ids' and 'get_pages'. 3130 * 3131 * @since 2.0.0 3132 * @deprecated 3.4.0 Use clean_post_cache 3133 * @see clean_post_cache() 3134 * 3135 * @param int $id Page ID to clean 3136 */ 3137 function clean_page_cache( $id ) { 3138 _deprecated_function( __FUNCTION__, '3.4.0', 'clean_post_cache()' ); 3139 3140 clean_post_cache( $id ); 3141 } 3142 3143 /** 3144 * Retrieve nonce action "Are you sure" message. 3145 * 3146 * Deprecated in 3.4.1 and 3.5.0. Backported to 3.3.3. 3147 * 3148 * @since 2.0.4 3149 * @deprecated 3.4.1 Use wp_nonce_ays() 3150 * @see wp_nonce_ays() 3151 * 3152 * @param string $action Nonce action. 3153 * @return string Are you sure message. 3154 */ 3155 function wp_explain_nonce( $action ) { 3156 _deprecated_function( __FUNCTION__, '3.4.1', 'wp_nonce_ays()' ); 3157 return __( 'Are you sure you want to do this?' ); 3158 } 3159 3160 /** 3161 * Display "sticky" CSS class, if a post is sticky. 3162 * 3163 * @since 2.7.0 3164 * @deprecated 3.5.0 Use post_class() 3165 * @see post_class() 3166 * 3167 * @param int $post_id An optional post ID. 3168 */ 3169 function sticky_class( $post_id = null ) { 3170 _deprecated_function( __FUNCTION__, '3.5.0', 'post_class()' ); 3171 if ( is_sticky( $post_id ) ) 3172 echo ' sticky'; 3173 } 3174 3175 /** 3176 * Retrieve post ancestors. 3177 * 3178 * This is no longer needed as WP_Post lazy-loads the ancestors 3179 * property with get_post_ancestors(). 3180 * 3181 * @since 2.3.4 3182 * @deprecated 3.5.0 Use get_post_ancestors() 3183 * @see get_post_ancestors() 3184 * 3185 * @param WP_Post $post Post object, passed by reference (unused). 3186 */ 3187 function _get_post_ancestors( &$post ) { 3188 _deprecated_function( __FUNCTION__, '3.5.0' ); 3189 } 3190 3191 /** 3192 * Load an image from a string, if PHP supports it. 3193 * 3194 * @since 2.1.0 3195 * @deprecated 3.5.0 Use wp_get_image_editor() 3196 * @see wp_get_image_editor() 3197 * 3198 * @param string $file Filename of the image to load. 3199 * @return resource|GdImage|string The resulting image resource or GdImage instance on success, 3200 * error string on failure. 3201 */ 3202 function wp_load_image( $file ) { 3203 _deprecated_function( __FUNCTION__, '3.5.0', 'wp_get_image_editor()' ); 3204 3205 if ( is_numeric( $file ) ) 3206 $file = get_attached_file( $file ); 3207 3208 if ( ! is_file( $file ) ) { 3209 /* translators: %s: File name. */ 3210 return sprintf( __( 'File “%s” does not exist?' ), $file ); 3211 } 3212 3213 if ( ! function_exists('imagecreatefromstring') ) 3214 return __('The GD image library is not installed.'); 3215 3216 // Set artificially high because GD uses uncompressed images in memory. 3217 wp_raise_memory_limit( 'image' ); 3218 3219 $image = imagecreatefromstring( file_get_contents( $file ) ); 3220 3221 if ( ! is_gd_image( $image ) ) { 3222 /* translators: %s: File name. */ 3223 return sprintf( __( 'File “%s” is not an image.' ), $file ); 3224 } 3225 3226 return $image; 3227 } 3228 3229 /** 3230 * Scale down an image to fit a particular size and save a new copy of the image. 3231 * 3232 * The PNG transparency will be preserved using the function, as well as the 3233 * image type. If the file going in is PNG, then the resized image is going to 3234 * be PNG. The only supported image types are PNG, GIF, and JPEG. 3235 * 3236 * Some functionality requires API to exist, so some PHP version may lose out 3237 * support. This is not the fault of WordPress (where functionality is 3238 * downgraded, not actual defects), but of your PHP version. 3239 * 3240 * @since 2.5.0 3241 * @deprecated 3.5.0 Use wp_get_image_editor() 3242 * @see wp_get_image_editor() 3243 * 3244 * @param string $file Image file path. 3245 * @param int $max_w Maximum width to resize to. 3246 * @param int $max_h Maximum height to resize to. 3247 * @param bool $crop Optional. Whether to crop image or resize. Default false. 3248 * @param string $suffix Optional. File suffix. Default null. 3249 * @param string $dest_path Optional. New image file path. Default null. 3250 * @param int $jpeg_quality Optional. Image quality percentage. Default 90. 3251 * @return mixed WP_Error on failure. String with new destination path. 3252 */ 3253 function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) { 3254 _deprecated_function( __FUNCTION__, '3.5.0', 'wp_get_image_editor()' ); 3255 3256 $editor = wp_get_image_editor( $file ); 3257 if ( is_wp_error( $editor ) ) 3258 return $editor; 3259 $editor->set_quality( $jpeg_quality ); 3260 3261 $resized = $editor->resize( $max_w, $max_h, $crop ); 3262 if ( is_wp_error( $resized ) ) 3263 return $resized; 3264 3265 $dest_file = $editor->generate_filename( $suffix, $dest_path ); 3266 $saved = $editor->save( $dest_file ); 3267 3268 if ( is_wp_error( $saved ) ) 3269 return $saved; 3270 3271 return $dest_file; 3272 } 3273 3274 /** 3275 * Retrieve a single post, based on post ID. 3276 * 3277 * Has categories in 'post_category' property or key. Has tags in 'tags_input' 3278 * property or key. 3279 * 3280 * @since 1.0.0 3281 * @deprecated 3.5.0 Use get_post() 3282 * @see get_post() 3283 * 3284 * @param int $postid Post ID. 3285 * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A. 3286 * @return WP_Post|null Post object or array holding post contents and information 3287 */ 3288 function wp_get_single_post( $postid = 0, $mode = OBJECT ) { 3289 _deprecated_function( __FUNCTION__, '3.5.0', 'get_post()' ); 3290 return get_post( $postid, $mode ); 3291 } 3292 3293 /** 3294 * Check that the user login name and password is correct. 3295 * 3296 * @since 0.71 3297 * @deprecated 3.5.0 Use wp_authenticate() 3298 * @see wp_authenticate() 3299 * 3300 * @param string $user_login User name. 3301 * @param string $user_pass User password. 3302 * @return bool False if does not authenticate, true if username and password authenticates. 3303 */ 3304 function user_pass_ok($user_login, $user_pass) { 3305 _deprecated_function( __FUNCTION__, '3.5.0', 'wp_authenticate()' ); 3306 $user = wp_authenticate( $user_login, $user_pass ); 3307 if ( is_wp_error( $user ) ) 3308 return false; 3309 3310 return true; 3311 } 3312 3313 /** 3314 * Callback formerly fired on the save_post hook. No longer needed. 3315 * 3316 * @since 2.3.0 3317 * @deprecated 3.5.0 3318 */ 3319 function _save_post_hook() {} 3320 3321 /** 3322 * Check if the installed version of GD supports particular image type 3323 * 3324 * @since 2.9.0 3325 * @deprecated 3.5.0 Use wp_image_editor_supports() 3326 * @see wp_image_editor_supports() 3327 * 3328 * @param string $mime_type 3329 * @return bool 3330 */ 3331 function gd_edit_image_support($mime_type) { 3332 _deprecated_function( __FUNCTION__, '3.5.0', 'wp_image_editor_supports()' ); 3333 3334 if ( function_exists('imagetypes') ) { 3335 switch( $mime_type ) { 3336 case 'image/jpeg': 3337 return (imagetypes() & IMG_JPG) != 0; 3338 case 'image/png': 3339 return (imagetypes() & IMG_PNG) != 0; 3340 case 'image/gif': 3341 return (imagetypes() & IMG_GIF) != 0; 3342 case 'image/webp': 3343 return (imagetypes() & IMG_WEBP) != 0; 3344 case 'image/avif': 3345 return (imagetypes() & IMG_AVIF) != 0; 3346 } 3347 } else { 3348 switch( $mime_type ) { 3349 case 'image/jpeg': 3350 return function_exists('imagecreatefromjpeg'); 3351 case 'image/png': 3352 return function_exists('imagecreatefrompng'); 3353 case 'image/gif': 3354 return function_exists('imagecreatefromgif'); 3355 case 'image/webp': 3356 return function_exists('imagecreatefromwebp'); 3357 case 'image/avif': 3358 return function_exists('imagecreatefromavif'); 3359 } 3360 } 3361 return false; 3362 } 3363 3364 /** 3365 * Converts an integer byte value to a shorthand byte value. 3366 * 3367 * @since 2.3.0 3368 * @deprecated 3.6.0 Use size_format() 3369 * @see size_format() 3370 * 3371 * @param int $bytes An integer byte value. 3372 * @return string A shorthand byte value. 3373 */ 3374 function wp_convert_bytes_to_hr( $bytes ) { 3375 _deprecated_function( __FUNCTION__, '3.6.0', 'size_format()' ); 3376 3377 $units = array( 0 => 'B', 1 => 'KB', 2 => 'MB', 3 => 'GB', 4 => 'TB' ); 3378 $log = log( $bytes, KB_IN_BYTES ); 3379 $power = ! is_nan( $log ) && ! is_infinite( $log ) ? (int) $log : 0; 3380 $size = KB_IN_BYTES ** ( $log - $power ); 3381 3382 if ( ! is_nan( $size ) && array_key_exists( $power, $units ) ) { 3383 $unit = $units[ $power ]; 3384 } else { 3385 $size = $bytes; 3386 $unit = $units[0]; 3387 } 3388 3389 return $size . $unit; 3390 } 3391 3392 /** 3393 * Formerly used internally to tidy up the search terms. 3394 * 3395 * @since 2.9.0 3396 * @access private 3397 * @deprecated 3.7.0 3398 * 3399 * @param string $t Search terms to "tidy", e.g. trim. 3400 * @return string Trimmed search terms. 3401 */ 3402 function _search_terms_tidy( $t ) { 3403 _deprecated_function( __FUNCTION__, '3.7.0' ); 3404 return trim( $t, "\"'\n\r " ); 3405 } 3406 3407 /** 3408 * Determine if TinyMCE is available. 3409 * 3410 * Checks to see if the user has deleted the tinymce files to slim down 3411 * their WordPress installation. 3412 * 3413 * @since 2.1.0 3414 * @deprecated 3.9.0 3415 * 3416 * @return bool Whether TinyMCE exists. 3417 */ 3418 function rich_edit_exists() { 3419 global $wp_rich_edit_exists; 3420 _deprecated_function( __FUNCTION__, '3.9.0' ); 3421 3422 if ( ! isset( $wp_rich_edit_exists ) ) 3423 $wp_rich_edit_exists = file_exists( ABSPATH . WPINC . '/js/tinymce/tinymce.js' ); 3424 3425 return $wp_rich_edit_exists; 3426 } 3427 3428 /** 3429 * Old callback for tag link tooltips. 3430 * 3431 * @since 2.7.0 3432 * @access private 3433 * @deprecated 3.9.0 3434 * 3435 * @param int $count Number of topics. 3436 * @return int Number of topics. 3437 */ 3438 function default_topic_count_text( $count ) { 3439 return $count; 3440 } 3441 3442 /** 3443 * Formerly used to escape strings before inserting into the DB. 3444 * 3445 * Has not performed this function for many, many years. Use wpdb::prepare() instead. 3446 * 3447 * @since 0.71 3448 * @deprecated 3.9.0 3449 * 3450 * @param string $content The text to format. 3451 * @return string The very same text. 3452 */ 3453 function format_to_post( $content ) { 3454 _deprecated_function( __FUNCTION__, '3.9.0' ); 3455 return $content; 3456 } 3457 3458 /** 3459 * Formerly used to escape strings before searching the DB. It was poorly documented and never worked as described. 3460 * 3461 * @since 2.5.0 3462 * @deprecated 4.0.0 Use wpdb::esc_like() 3463 * @see wpdb::esc_like() 3464 * 3465 * @param string $text The text to be escaped. 3466 * @return string text, safe for inclusion in LIKE query. 3467 */ 3468 function like_escape($text) { 3469 _deprecated_function( __FUNCTION__, '4.0.0', 'wpdb::esc_like()' ); 3470 return str_replace( array( "%", "_" ), array( "\\%", "\\_" ), $text ); 3471 } 3472 3473 /** 3474 * Determines if the URL can be accessed over SSL. 3475 * 3476 * Determines if the URL can be accessed over SSL by using the WordPress HTTP API to access 3477 * the URL using https as the scheme. 3478 * 3479 * @since 2.5.0 3480 * @deprecated 4.0.0 3481 * 3482 * @param string $url The URL to test. 3483 * @return bool Whether SSL access is available. 3484 */ 3485 function url_is_accessable_via_ssl( $url ) { 3486 _deprecated_function( __FUNCTION__, '4.0.0' ); 3487 3488 $response = wp_remote_get( set_url_scheme( $url, 'https' ) ); 3489 3490 if ( !is_wp_error( $response ) ) { 3491 $status = wp_remote_retrieve_response_code( $response ); 3492 if ( 200 == $status || 401 == $status ) { 3493 return true; 3494 } 3495 } 3496 3497 return false; 3498 } 3499 3500 /** 3501 * Start preview theme output buffer. 3502 * 3503 * Will only perform task if the user has permissions and template and preview 3504 * query variables exist. 3505 * 3506 * @since 2.6.0 3507 * @deprecated 4.3.0 3508 */ 3509 function preview_theme() { 3510 _deprecated_function( __FUNCTION__, '4.3.0' ); 3511 } 3512 3513 /** 3514 * Private function to modify the current template when previewing a theme 3515 * 3516 * @since 2.9.0 3517 * @deprecated 4.3.0 3518 * @access private 3519 * 3520 * @return string 3521 */ 3522 function _preview_theme_template_filter() { 3523 _deprecated_function( __FUNCTION__, '4.3.0' ); 3524 return ''; 3525 } 3526 3527 /** 3528 * Private function to modify the current stylesheet when previewing a theme 3529 * 3530 * @since 2.9.0 3531 * @deprecated 4.3.0 3532 * @access private 3533 * 3534 * @return string 3535 */ 3536 function _preview_theme_stylesheet_filter() { 3537 _deprecated_function( __FUNCTION__, '4.3.0' ); 3538 return ''; 3539 } 3540 3541 /** 3542 * Callback function for ob_start() to capture all links in the theme. 3543 * 3544 * @since 2.6.0 3545 * @deprecated 4.3.0 3546 * @access private 3547 * 3548 * @param string $content 3549 * @return string 3550 */ 3551 function preview_theme_ob_filter( $content ) { 3552 _deprecated_function( __FUNCTION__, '4.3.0' ); 3553 return $content; 3554 } 3555 3556 /** 3557 * Manipulates preview theme links in order to control and maintain location. 3558 * 3559 * Callback function for preg_replace_callback() to accept and filter matches. 3560 * 3561 * @since 2.6.0 3562 * @deprecated 4.3.0 3563 * @access private 3564 * 3565 * @param array $matches 3566 * @return string 3567 */ 3568 function preview_theme_ob_filter_callback( $matches ) { 3569 _deprecated_function( __FUNCTION__, '4.3.0' ); 3570 return ''; 3571 } 3572 3573 /** 3574 * Formats text for the rich text editor. 3575 * 3576 * The {@see 'richedit_pre'} filter is applied here. If `$text` is empty the filter will 3577 * be applied to an empty string. 3578 * 3579 * @since 2.0.0 3580 * @deprecated 4.3.0 Use format_for_editor() 3581 * @see format_for_editor() 3582 * 3583 * @param string $text The text to be formatted. 3584 * @return string The formatted text after filter is applied. 3585 */ 3586 function wp_richedit_pre($text) { 3587 _deprecated_function( __FUNCTION__, '4.3.0', 'format_for_editor()' ); 3588 3589 if ( empty( $text ) ) { 3590 /** 3591 * Filters text returned for the rich text editor. 3592 * 3593 * This filter is first evaluated, and the value returned, if an empty string 3594 * is passed to wp_richedit_pre(). If an empty string is passed, it results 3595 * in a break tag and line feed. 3596 * 3597 * If a non-empty string is passed, the filter is evaluated on the wp_richedit_pre() 3598 * return after being formatted. 3599 * 3600 * @since 2.0.0 3601 * @deprecated 4.3.0 3602 * 3603 * @param string $output Text for the rich text editor. 3604 */ 3605 return apply_filters( 'richedit_pre', '' ); 3606 } 3607 3608 $output = convert_chars($text); 3609 $output = wpautop($output); 3610 $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); 3611 3612 /** This filter is documented in wp-includes/deprecated.php */ 3613 return apply_filters( 'richedit_pre', $output ); 3614 } 3615 3616 /** 3617 * Formats text for the HTML editor. 3618 * 3619 * Unless $output is empty it will pass through htmlspecialchars before the 3620 * {@see 'htmledit_pre'} filter is applied. 3621 * 3622 * @since 2.5.0 3623 * @deprecated 4.3.0 Use format_for_editor() 3624 * @see format_for_editor() 3625 * 3626 * @param string $output The text to be formatted. 3627 * @return string Formatted text after filter applied. 3628 */ 3629 function wp_htmledit_pre($output) { 3630 _deprecated_function( __FUNCTION__, '4.3.0', 'format_for_editor()' ); 3631 3632 if ( !empty($output) ) 3633 $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); // Convert only '< > &'. 3634 3635 /** 3636 * Filters the text before it is formatted for the HTML editor. 3637 * 3638 * @since 2.5.0 3639 * @deprecated 4.3.0 3640 * 3641 * @param string $output The HTML-formatted text. 3642 */ 3643 return apply_filters( 'htmledit_pre', $output ); 3644 } 3645 3646 /** 3647 * Retrieve permalink from post ID. 3648 * 3649 * @since 1.0.0 3650 * @deprecated 4.4.0 Use get_permalink() 3651 * @see get_permalink() 3652 * 3653 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post. 3654 * @return string|false 3655 */ 3656 function post_permalink( $post = 0 ) { 3657 _deprecated_function( __FUNCTION__, '4.4.0', 'get_permalink()' ); 3658 3659 return get_permalink( $post ); 3660 } 3661 3662 /** 3663 * Perform a HTTP HEAD or GET request. 3664 * 3665 * If $file_path is a writable filename, this will do a GET request and write 3666 * the file to that path. 3667 * 3668 * @since 2.5.0 3669 * @deprecated 4.4.0 Use WP_Http 3670 * @see WP_Http 3671 * 3672 * @param string $url URL to fetch. 3673 * @param string|bool $file_path Optional. File path to write request to. Default false. 3674 * @param int $red Optional. The number of Redirects followed, Upon 5 being hit, 3675 * returns false. Default 1. 3676 * @return \WpOrg\Requests\Utility\CaseInsensitiveDictionary|false Headers on success, false on failure. 3677 */ 3678 function wp_get_http( $url, $file_path = false, $red = 1 ) { 3679 _deprecated_function( __FUNCTION__, '4.4.0', 'WP_Http' ); 3680 3681 // Add 60 seconds to the script timeout to ensure the remote request has enough time. 3682 if ( function_exists( 'set_time_limit' ) ) { 3683 @set_time_limit( 60 ); 3684 } 3685 3686 if ( $red > 5 ) 3687 return false; 3688 3689 $options = array(); 3690 $options['redirection'] = 5; 3691 3692 if ( false == $file_path ) 3693 $options['method'] = 'HEAD'; 3694 else 3695 $options['method'] = 'GET'; 3696 3697 $response = wp_safe_remote_request( $url, $options ); 3698 3699 if ( is_wp_error( $response ) ) 3700 return false; 3701 3702 $headers = wp_remote_retrieve_headers( $response ); 3703 $headers['response'] = wp_remote_retrieve_response_code( $response ); 3704 3705 // WP_HTTP no longer follows redirects for HEAD requests. 3706 if ( 'HEAD' == $options['method'] && in_array($headers['response'], array(301, 302)) && isset( $headers['location'] ) ) { 3707 return wp_get_http( $headers['location'], $file_path, ++$red ); 3708 } 3709 3710 if ( false == $file_path ) 3711 return $headers; 3712 3713 // GET request - write it to the supplied filename. 3714 $out_fp = fopen($file_path, 'w'); 3715 if ( !$out_fp ) 3716 return $headers; 3717 3718 fwrite( $out_fp, wp_remote_retrieve_body( $response ) ); 3719 fclose($out_fp); 3720 clearstatcache(); 3721 3722 return $headers; 3723 } 3724 3725 /** 3726 * Whether SSL login should be forced. 3727 * 3728 * @since 2.6.0 3729 * @deprecated 4.4.0 Use force_ssl_admin() 3730 * @see force_ssl_admin() 3731 * 3732 * @param string|bool $force Optional Whether to force SSL login. Default null. 3733 * @return bool True if forced, false if not forced. 3734 */ 3735 function force_ssl_login( $force = null ) { 3736 _deprecated_function( __FUNCTION__, '4.4.0', 'force_ssl_admin()' ); 3737 return force_ssl_admin( $force ); 3738 } 3739 3740 /** 3741 * Retrieve path of comment popup template in current or parent template. 3742 * 3743 * @since 1.5.0 3744 * @deprecated 4.5.0 3745 * 3746 * @return string Full path to comments popup template file. 3747 */ 3748 function get_comments_popup_template() { 3749 _deprecated_function( __FUNCTION__, '4.5.0' ); 3750 3751 return ''; 3752 } 3753 3754 /** 3755 * Determines whether the current URL is within the comments popup window. 3756 * 3757 * For more information on this and similar theme functions, check out 3758 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ 3759 * Conditional Tags} article in the Theme Developer Handbook. 3760 * 3761 * @since 1.5.0 3762 * @deprecated 4.5.0 3763 * 3764 * @return false Always returns false. 3765 */ 3766 function is_comments_popup() { 3767 _deprecated_function( __FUNCTION__, '4.5.0' ); 3768 3769 return false; 3770 } 3771 3772 /** 3773 * Display the JS popup script to show a comment. 3774 * 3775 * @since 0.71 3776 * @deprecated 4.5.0 3777 */ 3778 function comments_popup_script() { 3779 _deprecated_function( __FUNCTION__, '4.5.0' ); 3780 } 3781 3782 /** 3783 * Adds element attributes to open links in new tabs. 3784 * 3785 * @since 0.71 3786 * @deprecated 4.5.0 3787 * 3788 * @param string $text Content to replace links to open in a new tab. 3789 * @return string Content that has filtered links. 3790 */ 3791 function popuplinks( $text ) { 3792 _deprecated_function( __FUNCTION__, '4.5.0' ); 3793 $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); 3794 return $text; 3795 } 3796 3797 /** 3798 * The Google Video embed handler callback. 3799 * 3800 * Deprecated function that previously assisted in turning Google Video URLs 3801 * into embeds but that service has since been shut down. 3802 * 3803 * @since 2.9.0 3804 * @deprecated 4.6.0 3805 * 3806 * @return string An empty string. 3807 */ 3808 function wp_embed_handler_googlevideo( $matches, $attr, $url, $rawattr ) { 3809 _deprecated_function( __FUNCTION__, '4.6.0' ); 3810 3811 return ''; 3812 } 3813 3814 /** 3815 * Retrieve path of paged template in current or parent template. 3816 * 3817 * @since 1.5.0 3818 * @deprecated 4.7.0 The paged.php template is no longer part of the theme template hierarchy. 3819 * 3820 * @return string Full path to paged template file. 3821 */ 3822 function get_paged_template() { 3823 _deprecated_function( __FUNCTION__, '4.7.0' ); 3824 3825 return get_query_template( 'paged' ); 3826 } 3827 3828 /** 3829 * Removes the HTML JavaScript entities found in early versions of Netscape 4. 3830 * 3831 * Previously, this function was pulled in from the original 3832 * import of kses and removed a specific vulnerability only 3833 * existent in early version of Netscape 4. However, this 3834 * vulnerability never affected any other browsers and can 3835 * be considered safe for the modern web. 3836 * 3837 * The regular expression which sanitized this vulnerability 3838 * has been removed in consideration of the performance and 3839 * energy demands it placed, now merely passing through its 3840 * input to the return. 3841 * 3842 * @since 1.0.0 3843 * @deprecated 4.7.0 Officially dropped security support for Netscape 4. 3844 * 3845 * @param string $content 3846 * @return string 3847 */ 3848 function wp_kses_js_entities( $content ) { 3849 _deprecated_function( __FUNCTION__, '4.7.0' ); 3850 3851 return preg_replace( '%&\s*\{[^}]*(\}\s*;?|$)%', '', $content ); 3852 } 3853 3854 /** 3855 * Sort categories by ID. 3856 * 3857 * Used by usort() as a callback, should not be used directly. Can actually be 3858 * used to sort any term object. 3859 * 3860 * @since 2.3.0 3861 * @deprecated 4.7.0 Use wp_list_sort() 3862 * @access private 3863 * 3864 * @param object $a 3865 * @param object $b 3866 * @return int 3867 */ 3868 function _usort_terms_by_ID( $a, $b ) { 3869 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3870 3871 if ( $a->term_id > $b->term_id ) 3872 return 1; 3873 elseif ( $a->term_id < $b->term_id ) 3874 return -1; 3875 else 3876 return 0; 3877 } 3878 3879 /** 3880 * Sort categories by name. 3881 * 3882 * Used by usort() as a callback, should not be used directly. Can actually be 3883 * used to sort any term object. 3884 * 3885 * @since 2.3.0 3886 * @deprecated 4.7.0 Use wp_list_sort() 3887 * @access private 3888 * 3889 * @param object $a 3890 * @param object $b 3891 * @return int 3892 */ 3893 function _usort_terms_by_name( $a, $b ) { 3894 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3895 3896 return strcmp( $a->name, $b->name ); 3897 } 3898 3899 /** 3900 * Sort menu items by the desired key. 3901 * 3902 * @since 3.0.0 3903 * @deprecated 4.7.0 Use wp_list_sort() 3904 * @access private 3905 * 3906 * @global string $_menu_item_sort_prop 3907 * 3908 * @param object $a The first object to compare 3909 * @param object $b The second object to compare 3910 * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b. 3911 */ 3912 function _sort_nav_menu_items( $a, $b ) { 3913 global $_menu_item_sort_prop; 3914 3915 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3916 3917 if ( empty( $_menu_item_sort_prop ) ) 3918 return 0; 3919 3920 if ( ! isset( $a->$_menu_item_sort_prop ) || ! isset( $b->$_menu_item_sort_prop ) ) 3921 return 0; 3922 3923 $_a = (int) $a->$_menu_item_sort_prop; 3924 $_b = (int) $b->$_menu_item_sort_prop; 3925 3926 if ( $a->$_menu_item_sort_prop == $b->$_menu_item_sort_prop ) 3927 return 0; 3928 elseif ( $_a == $a->$_menu_item_sort_prop && $_b == $b->$_menu_item_sort_prop ) 3929 return $_a < $_b ? -1 : 1; 3930 else 3931 return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop ); 3932 } 3933 3934 /** 3935 * Retrieves the Press This bookmarklet link. 3936 * 3937 * @since 2.6.0 3938 * @deprecated 4.9.0 3939 * @return string 3940 */ 3941 function get_shortcut_link() { 3942 _deprecated_function( __FUNCTION__, '4.9.0' ); 3943 3944 $link = ''; 3945 3946 /** 3947 * Filters the Press This bookmarklet link. 3948 * 3949 * @since 2.6.0 3950 * @deprecated 4.9.0 3951 * 3952 * @param string $link The Press This bookmarklet link. 3953 */ 3954 return apply_filters( 'shortcut_link', $link ); 3955 } 3956 3957 /** 3958 * Ajax handler for saving a post from Press This. 3959 * 3960 * @since 4.2.0 3961 * @deprecated 4.9.0 3962 */ 3963 function wp_ajax_press_this_save_post() { 3964 _deprecated_function( __FUNCTION__, '4.9.0' ); 3965 if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) { 3966 include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; 3967 $wp_press_this = new WP_Press_This_Plugin(); 3968 $wp_press_this->save_post(); 3969 } else { 3970 wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) ); 3971 } 3972 } 3973 3974 /** 3975 * Ajax handler for creating new category from Press This. 3976 * 3977 * @since 4.2.0 3978 * @deprecated 4.9.0 3979 */ 3980 function wp_ajax_press_this_add_category() { 3981 _deprecated_function( __FUNCTION__, '4.9.0' ); 3982 if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) { 3983 include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; 3984 $wp_press_this = new WP_Press_This_Plugin(); 3985 $wp_press_this->add_category(); 3986 } else { 3987 wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) ); 3988 } 3989 } 3990 3991 /** 3992 * Return the user request object for the specified request ID. 3993 * 3994 * @since 4.9.6 3995 * @deprecated 5.4.0 Use wp_get_user_request() 3996 * @see wp_get_user_request() 3997 * 3998 * @param int $request_id The ID of the user request. 3999 * @return WP_User_Request|false 4000 */ 4001 function wp_get_user_request_data( $request_id ) { 4002 _deprecated_function( __FUNCTION__, '5.4.0', 'wp_get_user_request()' ); 4003 return wp_get_user_request( $request_id ); 4004 } 4005 4006 /** 4007 * Filters 'img' elements in post content to add 'srcset' and 'sizes' attributes. 4008 * 4009 * @since 4.4.0 4010 * @deprecated 5.5.0 4011 * 4012 * @see wp_image_add_srcset_and_sizes() 4013 * 4014 * @param string $content The raw post content to be filtered. 4015 * @return string Converted content with 'srcset' and 'sizes' attributes added to images. 4016 */ 4017 function wp_make_content_images_responsive( $content ) { 4018 _deprecated_function( __FUNCTION__, '5.5.0', 'wp_filter_content_tags()' ); 4019 4020 // This will also add the `loading` attribute to `img` tags, if enabled. 4021 return wp_filter_content_tags( $content ); 4022 } 4023 4024 /** 4025 * Turn register globals off. 4026 * 4027 * @since 2.1.0 4028 * @access private 4029 * @deprecated 5.5.0 4030 */ 4031 function wp_unregister_GLOBALS() { 4032 // register_globals was deprecated in PHP 5.3 and removed entirely in PHP 5.4. 4033 _deprecated_function( __FUNCTION__, '5.5.0' ); 4034 } 4035 4036 /** 4037 * Does comment contain disallowed characters or words. 4038 * 4039 * @since 1.5.0 4040 * @deprecated 5.5.0 Use wp_check_comment_disallowed_list() instead. 4041 * Please consider writing more inclusive code. 4042 * 4043 * @param string $author The author of the comment 4044 * @param string $email The email of the comment 4045 * @param string $url The url used in the comment 4046 * @param string $comment The comment content 4047 * @param string $user_ip The comment author's IP address 4048 * @param string $user_agent The author's browser user agent 4049 * @return bool True if comment contains disallowed content, false if comment does not 4050 */ 4051 function wp_blacklist_check( $author, $email, $url, $comment, $user_ip, $user_agent ) { 4052 _deprecated_function( __FUNCTION__, '5.5.0', 'wp_check_comment_disallowed_list()' ); 4053 4054 return wp_check_comment_disallowed_list( $author, $email, $url, $comment, $user_ip, $user_agent ); 4055 } 4056 4057 /** 4058 * Filters out `register_meta()` args based on an allowed list. 4059 * 4060 * `register_meta()` args may change over time, so requiring the allowed list 4061 * to be explicitly turned off is a warranty seal of sorts. 4062 * 4063 * @access private 4064 * @since 4.6.0 4065 * @deprecated 5.5.0 Use _wp_register_meta_args_allowed_list() instead. 4066 * Please consider writing more inclusive code. 4067 * 4068 * @param array $args Arguments from `register_meta()`. 4069 * @param array $default_args Default arguments for `register_meta()`. 4070 * @return array Filtered arguments. 4071 */ 4072 function _wp_register_meta_args_whitelist( $args, $default_args ) { 4073 _deprecated_function( __FUNCTION__, '5.5.0', '_wp_register_meta_args_allowed_list()' ); 4074 4075 return _wp_register_meta_args_allowed_list( $args, $default_args ); 4076 } 4077 4078 /** 4079 * Adds an array of options to the list of allowed options. 4080 * 4081 * @since 2.7.0 4082 * @deprecated 5.5.0 Use add_allowed_options() instead. 4083 * Please consider writing more inclusive code. 4084 * 4085 * @param array $new_options 4086 * @param string|array $options 4087 * @return array 4088 */ 4089 function add_option_whitelist( $new_options, $options = '' ) { 4090 _deprecated_function( __FUNCTION__, '5.5.0', 'add_allowed_options()' ); 4091 4092 return add_allowed_options( $new_options, $options ); 4093 } 4094 4095 /** 4096 * Removes a list of options from the allowed options list. 4097 * 4098 * @since 2.7.0 4099 * @deprecated 5.5.0 Use remove_allowed_options() instead. 4100 * Please consider writing more inclusive code. 4101 * 4102 * @param array $del_options 4103 * @param string|array $options 4104 * @return array 4105 */ 4106 function remove_option_whitelist( $del_options, $options = '' ) { 4107 _deprecated_function( __FUNCTION__, '5.5.0', 'remove_allowed_options()' ); 4108 4109 return remove_allowed_options( $del_options, $options ); 4110 } 4111 4112 /** 4113 * Adds slashes to only string values in an array of values. 4114 * 4115 * This should be used when preparing data for core APIs that expect slashed data. 4116 * This should not be used to escape data going directly into an SQL query. 4117 * 4118 * @since 5.3.0 4119 * @deprecated 5.6.0 Use wp_slash() 4120 * 4121 * @see wp_slash() 4122 * 4123 * @param mixed $value Scalar or array of scalars. 4124 * @return mixed Slashes $value 4125 */ 4126 function wp_slash_strings_only( $value ) { 4127 return map_deep( $value, 'addslashes_strings_only' ); 4128 } 4129 4130 /** 4131 * Adds slashes only if the provided value is a string. 4132 * 4133 * @since 5.3.0 4134 * @deprecated 5.6.0 4135 * 4136 * @see wp_slash() 4137 * 4138 * @param mixed $value 4139 * @return mixed 4140 */ 4141 function addslashes_strings_only( $value ) { 4142 return is_string( $value ) ? addslashes( $value ) : $value; 4143 } 4144 4145 /** 4146 * Displays a `noindex` meta tag if required by the blog configuration. 4147 * 4148 * If a blog is marked as not being public then the `noindex` meta tag will be 4149 * output to tell web robots not to index the page content. 4150 * 4151 * Typical usage is as a {@see 'wp_head'} callback: 4152 * 4153 * add_action( 'wp_head', 'noindex' ); 4154 * 4155 * @see wp_no_robots() 4156 * 4157 * @since 2.1.0 4158 * @deprecated 5.7.0 Use wp_robots_noindex() instead on 'wp_robots' filter. 4159 */ 4160 function noindex() { 4161 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_noindex()' ); 4162 4163 // If the blog is not public, tell robots to go away. 4164 if ( '0' == get_option( 'blog_public' ) ) { 4165 wp_no_robots(); 4166 } 4167 } 4168 4169 /** 4170 * Display a `noindex` meta tag. 4171 * 4172 * Outputs a `noindex` meta tag that tells web robots not to index the page content. 4173 * 4174 * Typical usage is as a {@see 'wp_head'} callback: 4175 * 4176 * add_action( 'wp_head', 'wp_no_robots' ); 4177 * 4178 * @since 3.3.0 4179 * @since 5.3.0 Echo `noindex,nofollow` if search engine visibility is discouraged. 4180 * @deprecated 5.7.0 Use wp_robots_no_robots() instead on 'wp_robots' filter. 4181 */ 4182 function wp_no_robots() { 4183 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_no_robots()' ); 4184 4185 if ( get_option( 'blog_public' ) ) { 4186 echo "<meta name='robots' content='noindex,follow' />\n"; 4187 return; 4188 } 4189 4190 echo "<meta name='robots' content='noindex,nofollow' />\n"; 4191 } 4192 4193 /** 4194 * Display a `noindex,noarchive` meta tag and referrer `strict-origin-when-cross-origin` meta tag. 4195 * 4196 * Outputs a `noindex,noarchive` meta tag that tells web robots not to index or cache the page content. 4197 * Outputs a referrer `strict-origin-when-cross-origin` meta tag that tells the browser not to send 4198 * the full URL as a referrer to other sites when cross-origin assets are loaded. 4199 * 4200 * Typical usage is as a {@see 'wp_head'} callback: 4201 * 4202 * add_action( 'wp_head', 'wp_sensitive_page_meta' ); 4203 * 4204 * @since 5.0.1 4205 * @deprecated 5.7.0 Use wp_robots_sensitive_page() instead on 'wp_robots' filter 4206 * and wp_strict_cross_origin_referrer() on 'wp_head' action. 4207 * 4208 * @see wp_robots_sensitive_page() 4209 */ 4210 function wp_sensitive_page_meta() { 4211 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_sensitive_page()' ); 4212 4213 ?> 4214 <meta name='robots' content='noindex,noarchive' /> 4215 <?php 4216 wp_strict_cross_origin_referrer(); 4217 } 4218 4219 /** 4220 * Render inner blocks from the `core/columns` block for generating an excerpt. 4221 * 4222 * @since 5.2.0 4223 * @access private 4224 * @deprecated 5.8.0 Use _excerpt_render_inner_blocks() introduced in 5.8.0. 4225 * 4226 * @see _excerpt_render_inner_blocks() 4227 * 4228 * @param array $columns The parsed columns block. 4229 * @param array $allowed_blocks The list of allowed inner blocks. 4230 * @return string The rendered inner blocks. 4231 */ 4232 function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) { 4233 _deprecated_function( __FUNCTION__, '5.8.0', '_excerpt_render_inner_blocks()' ); 4234 4235 return _excerpt_render_inner_blocks( $columns, $allowed_blocks ); 4236 } 4237 4238 /** 4239 * Renders the duotone filter SVG and returns the CSS filter property to 4240 * reference the rendered SVG. 4241 * 4242 * @since 5.9.0 4243 * @deprecated 5.9.1 Use wp_get_duotone_filter_property() introduced in 5.9.1. 4244 * 4245 * @see wp_get_duotone_filter_property() 4246 * 4247 * @param array $preset Duotone preset value as seen in theme.json. 4248 * @return string Duotone CSS filter property. 4249 */ 4250 function wp_render_duotone_filter_preset( $preset ) { 4251 _deprecated_function( __FUNCTION__, '5.9.1', 'wp_get_duotone_filter_property()' ); 4252 4253 return wp_get_duotone_filter_property( $preset ); 4254 } 4255 4256 /** 4257 * Checks whether serialization of the current block's border properties should occur. 4258 * 4259 * @since 5.8.0 4260 * @access private 4261 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4262 * 4263 * @see wp_should_skip_block_supports_serialization() 4264 * 4265 * @param WP_Block_Type $block_type Block type. 4266 * @return bool Whether serialization of the current block's border properties 4267 * should occur. 4268 */ 4269 function wp_skip_border_serialization( $block_type ) { 4270 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4271 4272 $border_support = $block_type->supports['__experimentalBorder'] ?? false; 4273 4274 return is_array( $border_support ) && 4275 array_key_exists( '__experimentalSkipSerialization', $border_support ) && 4276 $border_support['__experimentalSkipSerialization']; 4277 } 4278 4279 /** 4280 * Checks whether serialization of the current block's dimensions properties should occur. 4281 * 4282 * @since 5.9.0 4283 * @access private 4284 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4285 * 4286 * @see wp_should_skip_block_supports_serialization() 4287 * 4288 * @param WP_Block_type $block_type Block type. 4289 * @return bool Whether to serialize spacing support styles & classes. 4290 */ 4291 function wp_skip_dimensions_serialization( $block_type ) { 4292 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4293 4294 $dimensions_support = $block_type->supports['__experimentalDimensions'] ?? false; 4295 4296 return is_array( $dimensions_support ) && 4297 array_key_exists( '__experimentalSkipSerialization', $dimensions_support ) && 4298 $dimensions_support['__experimentalSkipSerialization']; 4299 } 4300 4301 /** 4302 * Checks whether serialization of the current block's spacing properties should occur. 4303 * 4304 * @since 5.9.0 4305 * @access private 4306 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4307 * 4308 * @see wp_should_skip_block_supports_serialization() 4309 * 4310 * @param WP_Block_Type $block_type Block type. 4311 * @return bool Whether to serialize spacing support styles & classes. 4312 */ 4313 function wp_skip_spacing_serialization( $block_type ) { 4314 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4315 4316 $spacing_support = $block_type->supports['spacing'] ?? false; 4317 4318 return is_array( $spacing_support ) && 4319 array_key_exists( '__experimentalSkipSerialization', $spacing_support ) && 4320 $spacing_support['__experimentalSkipSerialization']; 4321 } 4322 4323 /** 4324 * Inject the block editor assets that need to be loaded into the editor's iframe as an inline script. 4325 * 4326 * @since 5.8.0 4327 * @deprecated 6.0.0 4328 */ 4329 function wp_add_iframed_editor_assets_html() { 4330 _deprecated_function( __FUNCTION__, '6.0.0' ); 4331 } 4332 4333 /** 4334 * Retrieves thumbnail for an attachment. 4335 * Note that this works only for the (very) old image metadata style where 'thumb' was set, 4336 * and the 'sizes' array did not exist. This function returns false for the newer image metadata style 4337 * despite that 'thumbnail' is present in the 'sizes' array. 4338 * 4339 * @since 2.1.0 4340 * @deprecated 6.1.0 4341 * 4342 * @param int $post_id Optional. Attachment ID. Default is the ID of the global `$post`. 4343 * @return string|false Thumbnail file path on success, false on failure. 4344 */ 4345 function wp_get_attachment_thumb_file( $post_id = 0 ) { 4346 _deprecated_function( __FUNCTION__, '6.1.0' ); 4347 4348 $post_id = (int) $post_id; 4349 $post = get_post( $post_id ); 4350 4351 if ( ! $post ) { 4352 return false; 4353 } 4354 4355 // Use $post->ID rather than $post_id as get_post() may have used the global $post object. 4356 $imagedata = wp_get_attachment_metadata( $post->ID ); 4357 4358 if ( ! is_array( $imagedata ) ) { 4359 return false; 4360 } 4361 4362 $file = get_attached_file( $post->ID ); 4363 4364 if ( ! empty( $imagedata['thumb'] ) ) { 4365 $thumbfile = str_replace( wp_basename( $file ), $imagedata['thumb'], $file ); 4366 if ( file_exists( $thumbfile ) ) { 4367 /** 4368 * Filters the attachment thumbnail file path. 4369 * 4370 * @since 2.1.0 4371 * 4372 * @param string $thumbfile File path to the attachment thumbnail. 4373 * @param int $post_id Attachment ID. 4374 */ 4375 return apply_filters( 'wp_get_attachment_thumb_file', $thumbfile, $post->ID ); 4376 } 4377 } 4378 4379 return false; 4380 } 4381 4382 /** 4383 * Gets the path to a translation file for loading a textdomain just in time. 4384 * 4385 * Caches the retrieved results internally. 4386 * 4387 * @since 4.7.0 4388 * @deprecated 6.1.0 4389 * @access private 4390 * 4391 * @see _load_textdomain_just_in_time() 4392 * 4393 * @param string $domain Text domain. Unique identifier for retrieving translated strings. 4394 * @param bool $reset Whether to reset the internal cache. Used by the switch to locale functionality. 4395 * @return string|false The path to the translation file or false if no translation file was found. 4396 */ 4397 function _get_path_to_translation( $domain, $reset = false ) { 4398 _deprecated_function( __FUNCTION__, '6.1.0', 'WP_Textdomain_Registry' ); 4399 4400 static $available_translations = array(); 4401 4402 if ( true === $reset ) { 4403 $available_translations = array(); 4404 } 4405 4406 if ( ! isset( $available_translations[ $domain ] ) ) { 4407 $available_translations[ $domain ] = _get_path_to_translation_from_lang_dir( $domain ); 4408 } 4409 4410 return $available_translations[ $domain ]; 4411 } 4412 4413 /** 4414 * Gets the path to a translation file in the languages directory for the current locale. 4415 * 4416 * Holds a cached list of available .mo files to improve performance. 4417 * 4418 * @since 4.7.0 4419 * @deprecated 6.1.0 4420 * @access private 4421 * 4422 * @see _get_path_to_translation() 4423 * 4424 * @param string $domain Text domain. Unique identifier for retrieving translated strings. 4425 * @return string|false The path to the translation file or false if no translation file was found. 4426 */ 4427 function _get_path_to_translation_from_lang_dir( $domain ) { 4428 _deprecated_function( __FUNCTION__, '6.1.0', 'WP_Textdomain_Registry' ); 4429 4430 static $cached_mofiles = null; 4431 4432 if ( null === $cached_mofiles ) { 4433 $cached_mofiles = array(); 4434 4435 $locations = array( 4436 WP_LANG_DIR . '/plugins', 4437 WP_LANG_DIR . '/themes', 4438 ); 4439 4440 foreach ( $locations as $location ) { 4441 $mofiles = glob( $location . '/*.mo' ); 4442 if ( $mofiles ) { 4443 $cached_mofiles = array_merge( $cached_mofiles, $mofiles ); 4444 } 4445 } 4446 } 4447 4448 $locale = determine_locale(); 4449 $mofile = "{$domain}-{$locale}.mo"; 4450 4451 $path = WP_LANG_DIR . '/plugins/' . $mofile; 4452 if ( in_array( $path, $cached_mofiles, true ) ) { 4453 return $path; 4454 } 4455 4456 $path = WP_LANG_DIR . '/themes/' . $mofile; 4457 if ( in_array( $path, $cached_mofiles, true ) ) { 4458 return $path; 4459 } 4460 4461 return false; 4462 } 4463 4464 /** 4465 * Allows multiple block styles. 4466 * 4467 * @since 5.9.0 4468 * @deprecated 6.1.0 4469 * 4470 * @param array $metadata Metadata for registering a block type. 4471 * @return array Metadata for registering a block type. 4472 */ 4473 function _wp_multiple_block_styles( $metadata ) { 4474 _deprecated_function( __FUNCTION__, '6.1.0' ); 4475 return $metadata; 4476 } 4477 4478 /** 4479 * Generates an inline style for a typography feature e.g. text decoration, 4480 * text transform, and font style. 4481 * 4482 * @since 5.8.0 4483 * @access private 4484 * @deprecated 6.1.0 Use wp_style_engine_get_styles() introduced in 6.1.0. 4485 * 4486 * @see wp_style_engine_get_styles() 4487 * 4488 * @param array $attributes Block's attributes. 4489 * @param string $feature Key for the feature within the typography styles. 4490 * @param string $css_property Slug for the CSS property the inline style sets. 4491 * @return string CSS inline style. 4492 */ 4493 function wp_typography_get_css_variable_inline_style( $attributes, $feature, $css_property ) { 4494 _deprecated_function( __FUNCTION__, '6.1.0', 'wp_style_engine_get_styles()' ); 4495 4496 // Retrieve current attribute value or skip if not found. 4497 $style_value = _wp_array_get( $attributes, array( 'style', 'typography', $feature ), false ); 4498 if ( ! $style_value ) { 4499 return; 4500 } 4501 4502 // If we don't have a preset CSS variable, we'll assume it's a regular CSS value. 4503 if ( ! str_contains( $style_value, "var:preset|{$css_property}|" ) ) { 4504 return sprintf( '%s:%s;', $css_property, $style_value ); 4505 } 4506 4507 /* 4508 * We have a preset CSS variable as the style. 4509 * Get the style value from the string and return CSS style. 4510 */ 4511 $index_to_splice = strrpos( $style_value, '|' ) + 1; 4512 $slug = substr( $style_value, $index_to_splice ); 4513 4514 // Return the actual CSS inline style e.g. `text-decoration:var(--wp--preset--text-decoration--underline);`. 4515 return sprintf( '%s:var(--wp--preset--%s--%s);', $css_property, $css_property, $slug ); 4516 } 4517 4518 /** 4519 * Determines whether global terms are enabled. 4520 * 4521 * @since 3.0.0 4522 * @since 6.1.0 This function now always returns false. 4523 * @deprecated 6.1.0 4524 * 4525 * @return bool Always returns false. 4526 */ 4527 function global_terms_enabled() { 4528 _deprecated_function( __FUNCTION__, '6.1.0' ); 4529 4530 return false; 4531 } 4532 4533 /** 4534 * Filter the SQL clauses of an attachment query to include filenames. 4535 * 4536 * @since 4.7.0 4537 * @deprecated 6.0.3 4538 * @access private 4539 * 4540 * @param array $clauses An array including WHERE, GROUP BY, JOIN, ORDER BY, 4541 * DISTINCT, fields (SELECT), and LIMITS clauses. 4542 * @return array The unmodified clauses. 4543 */ 4544 function _filter_query_attachment_filenames( $clauses ) { 4545 _deprecated_function( __FUNCTION__, '6.0.3', 'add_filter( "wp_allow_query_attachment_by_filename", "__return_true" )' ); 4546 remove_filter( 'posts_clauses', __FUNCTION__ ); 4547 return $clauses; 4548 } 4549 4550 /** 4551 * Retrieves a page given its title. 4552 * 4553 * If more than one post uses the same title, the post with the smallest ID will be returned. 4554 * Be careful: in case of more than one post having the same title, it will check the oldest 4555 * publication date, not the smallest ID. 4556 * 4557 * Because this function uses the MySQL '=' comparison, $page_title will usually be matched 4558 * as case-insensitive with default collation. 4559 * 4560 * @since 2.1.0 4561 * @since 3.0.0 The `$post_type` parameter was added. 4562 * @deprecated 6.2.0 Use WP_Query. 4563 * 4564 * @global wpdb $wpdb WordPress database abstraction object. 4565 * 4566 * @param string $page_title Page title. 4567 * @param string $output Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which 4568 * correspond to a WP_Post object, an associative array, or a numeric array, 4569 * respectively. Default OBJECT. 4570 * @param string|array $post_type Optional. Post type or array of post types. Default 'page'. 4571 * @return WP_Post|array|null WP_Post (or array) on success, or null on failure. 4572 */ 4573 function get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) { 4574 _deprecated_function( __FUNCTION__, '6.2.0', 'WP_Query' ); 4575 global $wpdb; 4576 4577 if ( is_array( $post_type ) ) { 4578 $post_type = esc_sql( $post_type ); 4579 $post_type_in_string = "'" . implode( "','", $post_type ) . "'"; 4580 $sql = $wpdb->prepare( 4581 "SELECT ID 4582 FROM $wpdb->posts 4583 WHERE post_title = %s 4584 AND post_type IN ($post_type_in_string)", 4585 $page_title 4586 ); 4587 } else { 4588 $sql = $wpdb->prepare( 4589 "SELECT ID 4590 FROM $wpdb->posts 4591 WHERE post_title = %s 4592 AND post_type = %s", 4593 $page_title, 4594 $post_type 4595 ); 4596 } 4597 4598 $page = $wpdb->get_var( $sql ); 4599 4600 if ( $page ) { 4601 return get_post( $page, $output ); 4602 } 4603 4604 return null; 4605 } 4606 4607 /** 4608 * Returns the correct template for the site's home page. 4609 * 4610 * @access private 4611 * @since 6.0.0 4612 * @deprecated 6.2.0 Site Editor's server-side redirect for missing postType and postId 4613 * query args is removed. Thus, this function is no longer used. 4614 * 4615 * @return array|null A template object, or null if none could be found. 4616 */ 4617 function _resolve_home_block_template() { 4618 _deprecated_function( __FUNCTION__, '6.2.0' ); 4619 4620 $show_on_front = get_option( 'show_on_front' ); 4621 $front_page_id = get_option( 'page_on_front' ); 4622 4623 if ( 'page' === $show_on_front && $front_page_id ) { 4624 return array( 4625 'postType' => 'page', 4626 'postId' => $front_page_id, 4627 ); 4628 } 4629 4630 $hierarchy = array( 'front-page', 'home', 'index' ); 4631 $template = resolve_block_template( 'home', $hierarchy, '' ); 4632 4633 if ( ! $template ) { 4634 return null; 4635 } 4636 4637 return array( 4638 'postType' => 'wp_template', 4639 'postId' => $template->id, 4640 ); 4641 } 4642 4643 /** 4644 * Displays the link to the Windows Live Writer manifest file. 4645 * 4646 * @link https://msdn.microsoft.com/en-us/library/bb463265.aspx 4647 * @since 2.3.1 4648 * @deprecated 6.3.0 WLW manifest is no longer in use and no longer included in core, 4649 * so the output from this function is removed. 4650 */ 4651 function wlwmanifest_link() { 4652 _deprecated_function( __FUNCTION__, '6.3.0' ); 4653 } 4654 4655 /** 4656 * Queues comments for metadata lazy-loading. 4657 * 4658 * @since 4.5.0 4659 * @deprecated 6.3.0 Use wp_lazyload_comment_meta() instead. 4660 * 4661 * @param WP_Comment[] $comments Array of comment objects. 4662 */ 4663 function wp_queue_comments_for_comment_meta_lazyload( $comments ) { 4664 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_lazyload_comment_meta()' ); 4665 // Don't use `wp_list_pluck()` to avoid by-reference manipulation. 4666 $comment_ids = array(); 4667 if ( is_array( $comments ) ) { 4668 foreach ( $comments as $comment ) { 4669 if ( $comment instanceof WP_Comment ) { 4670 $comment_ids[] = $comment->comment_ID; 4671 } 4672 } 4673 } 4674 4675 wp_lazyload_comment_meta( $comment_ids ); 4676 } 4677 4678 /** 4679 * Gets the default value to use for a `loading` attribute on an element. 4680 * 4681 * This function should only be called for a tag and context if lazy-loading is generally enabled. 4682 * 4683 * The function usually returns 'lazy', but uses certain heuristics to guess whether the current element is likely to 4684 * appear above the fold, in which case it returns a boolean `false`, which will lead to the `loading` attribute being 4685 * omitted on the element. The purpose of this refinement is to avoid lazy-loading elements that are within the initial 4686 * viewport, which can have a negative performance impact. 4687 * 4688 * Under the hood, the function uses {@see wp_increase_content_media_count()} every time it is called for an element 4689 * within the main content. If the element is the very first content element, the `loading` attribute will be omitted. 4690 * This default threshold of 3 content elements to omit the `loading` attribute for can be customized using the 4691 * {@see 'wp_omit_loading_attr_threshold'} filter. 4692 * 4693 * @since 5.9.0 4694 * @deprecated 6.3.0 Use wp_get_loading_optimization_attributes() instead. 4695 * @see wp_get_loading_optimization_attributes() 4696 * 4697 * @global WP_Query $wp_query WordPress Query object. 4698 * 4699 * @param string $context Context for the element for which the `loading` attribute value is requested. 4700 * @return string|bool The default `loading` attribute value. Either 'lazy', 'eager', or a boolean `false`, to indicate 4701 * that the `loading` attribute should be skipped. 4702 */ 4703 function wp_get_loading_attr_default( $context ) { 4704 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_get_loading_optimization_attributes()' ); 4705 global $wp_query; 4706 4707 // Skip lazy-loading for the overall block template, as it is handled more granularly. 4708 if ( 'template' === $context ) { 4709 return false; 4710 } 4711 4712 /* 4713 * Do not lazy-load images in the header block template part, as they are likely above the fold. 4714 * For classic themes, this is handled in the condition below using the 'get_header' action. 4715 */ 4716 $header_area = WP_TEMPLATE_PART_AREA_HEADER; 4717 if ( "template_part_{$header_area}" === $context ) { 4718 return false; 4719 } 4720 4721 // Special handling for programmatically created image tags. 4722 if ( 'the_post_thumbnail' === $context || 'wp_get_attachment_image' === $context ) { 4723 /* 4724 * Skip programmatically created images within post content as they need to be handled together with the other 4725 * images within the post content. 4726 * Without this clause, they would already be counted below which skews the number and can result in the first 4727 * post content image being lazy-loaded only because there are images elsewhere in the post content. 4728 */ 4729 if ( doing_filter( 'the_content' ) ) { 4730 return false; 4731 } 4732 4733 // Conditionally skip lazy-loading on images before the loop. 4734 if ( 4735 // Only apply for main query but before the loop. 4736 $wp_query->before_loop && $wp_query->is_main_query() 4737 /* 4738 * Any image before the loop, but after the header has started should not be lazy-loaded, 4739 * except when the footer has already started which can happen when the current template 4740 * does not include any loop. 4741 */ 4742 && did_action( 'get_header' ) && ! did_action( 'get_footer' ) 4743 ) { 4744 return false; 4745 } 4746 } 4747 4748 /* 4749 * The first elements in 'the_content' or 'the_post_thumbnail' should not be lazy-loaded, 4750 * as they are likely above the fold. 4751 */ 4752 if ( 'the_content' === $context || 'the_post_thumbnail' === $context ) { 4753 // Only elements within the main query loop have special handling. 4754 if ( is_admin() || ! in_the_loop() || ! is_main_query() ) { 4755 return 'lazy'; 4756 } 4757 4758 // Increase the counter since this is a main query content element. 4759 $content_media_count = wp_increase_content_media_count(); 4760 4761 // If the count so far is below the threshold, return `false` so that the `loading` attribute is omitted. 4762 if ( $content_media_count <= wp_omit_loading_attr_threshold() ) { 4763 return false; 4764 } 4765 4766 // For elements after the threshold, lazy-load them as usual. 4767 return 'lazy'; 4768 } 4769 4770 // Lazy-load by default for any unknown context. 4771 return 'lazy'; 4772 } 4773 4774 /** 4775 * Adds `loading` attribute to an `img` HTML tag. 4776 * 4777 * @since 5.5.0 4778 * @deprecated 6.3.0 Use wp_img_tag_add_loading_optimization_attrs() instead. 4779 * @see wp_img_tag_add_loading_optimization_attrs() 4780 * 4781 * @param string $image The HTML `img` tag where the attribute should be added. 4782 * @param string $context Additional context to pass to the filters. 4783 * @return string Converted `img` tag with `loading` attribute added. 4784 */ 4785 function wp_img_tag_add_loading_attr( $image, $context ) { 4786 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_img_tag_add_loading_optimization_attrs()' ); 4787 /* 4788 * Get loading attribute value to use. This must occur before the conditional check below so that even images that 4789 * are ineligible for being lazy-loaded are considered. 4790 */ 4791 $value = wp_get_loading_attr_default( $context ); 4792 4793 // Images should have source and dimension attributes for the `loading` attribute to be added. 4794 if ( ! str_contains( $image, ' src="' ) || ! str_contains( $image, ' width="' ) || ! str_contains( $image, ' height="' ) ) { 4795 return $image; 4796 } 4797 4798 /** This filter is documented in wp-includes/media.php */ 4799 $value = apply_filters( 'wp_img_tag_add_loading_attr', $value, $image, $context ); 4800 4801 if ( $value ) { 4802 if ( ! in_array( $value, array( 'lazy', 'eager' ), true ) ) { 4803 $value = 'lazy'; 4804 } 4805 4806 return str_replace( '<img', '<img loading="' . esc_attr( $value ) . '"', $image ); 4807 } 4808 4809 return $image; 4810 } 4811 4812 /** 4813 * Takes input from [0, n] and returns it as [0, 1]. 4814 * 4815 * Direct port of TinyColor's function, lightly simplified to maintain 4816 * consistency with TinyColor. 4817 * 4818 * @link https://github.com/bgrins/TinyColor 4819 * 4820 * @since 5.8.0 4821 * @deprecated 6.3.0 4822 * 4823 * @access private 4824 * 4825 * @param mixed $n Number of unknown type. 4826 * @param int $max Upper value of the range to bound to. 4827 * @return float Value in the range [0, 1]. 4828 */ 4829 function wp_tinycolor_bound01( $n, $max ) { 4830 _deprecated_function( __FUNCTION__, '6.3.0' ); 4831 if ( 'string' === gettype( $n ) && str_contains( $n, '.' ) && 1 === (float) $n ) { 4832 $n = '100%'; 4833 } 4834 4835 $n = min( $max, max( 0, (float) $n ) ); 4836 4837 // Automatically convert percentage into number. 4838 if ( 'string' === gettype( $n ) && str_contains( $n, '%' ) ) { 4839 $n = (int) ( $n * $max ) / 100; 4840 } 4841 4842 // Handle floating point rounding errors. 4843 if ( ( abs( $n - $max ) < 0.000001 ) ) { 4844 return 1.0; 4845 } 4846 4847 // Convert into [0, 1] range if it isn't already. 4848 return ( $n % $max ) / (float) $max; 4849 } 4850 4851 /** 4852 * Direct port of tinycolor's boundAlpha function to maintain consistency with 4853 * how tinycolor works. 4854 * 4855 * @link https://github.com/bgrins/TinyColor 4856 * 4857 * @since 5.9.0 4858 * @deprecated 6.3.0 4859 * 4860 * @access private 4861 * 4862 * @param mixed $n Number of unknown type. 4863 * @return float Value in the range [0,1]. 4864 */ 4865 function _wp_tinycolor_bound_alpha( $n ) { 4866 _deprecated_function( __FUNCTION__, '6.3.0' ); 4867 4868 if ( is_numeric( $n ) ) { 4869 $n = (float) $n; 4870 if ( $n >= 0 && $n <= 1 ) { 4871 return $n; 4872 } 4873 } 4874 return 1; 4875 } 4876 4877 /** 4878 * Rounds and converts values of an RGB object. 4879 * 4880 * Direct port of TinyColor's function, lightly simplified to maintain 4881 * consistency with TinyColor. 4882 * 4883 * @link https://github.com/bgrins/TinyColor 4884 * 4885 * @since 5.8.0 4886 * @deprecated 6.3.0 4887 * 4888 * @access private 4889 * 4890 * @param array $rgb_color RGB object. 4891 * @return array Rounded and converted RGB object. 4892 */ 4893 function wp_tinycolor_rgb_to_rgb( $rgb_color ) { 4894 _deprecated_function( __FUNCTION__, '6.3.0' ); 4895 4896 return array( 4897 'r' => wp_tinycolor_bound01( $rgb_color['r'], 255 ) * 255, 4898 'g' => wp_tinycolor_bound01( $rgb_color['g'], 255 ) * 255, 4899 'b' => wp_tinycolor_bound01( $rgb_color['b'], 255 ) * 255, 4900 ); 4901 } 4902 4903 /** 4904 * Helper function for hsl to rgb conversion. 4905 * 4906 * Direct port of TinyColor's function, lightly simplified to maintain 4907 * consistency with TinyColor. 4908 * 4909 * @link https://github.com/bgrins/TinyColor 4910 * 4911 * @since 5.8.0 4912 * @deprecated 6.3.0 4913 * 4914 * @access private 4915 * 4916 * @param float $p first component. 4917 * @param float $q second component. 4918 * @param float $t third component. 4919 * @return float R, G, or B component. 4920 */ 4921 function wp_tinycolor_hue_to_rgb( $p, $q, $t ) { 4922 _deprecated_function( __FUNCTION__, '6.3.0' ); 4923 4924 if ( $t < 0 ) { 4925 ++$t; 4926 } 4927 if ( $t > 1 ) { 4928 --$t; 4929 } 4930 if ( $t < 1 / 6 ) { 4931 return $p + ( $q - $p ) * 6 * $t; 4932 } 4933 if ( $t < 1 / 2 ) { 4934 return $q; 4935 } 4936 if ( $t < 2 / 3 ) { 4937 return $p + ( $q - $p ) * ( 2 / 3 - $t ) * 6; 4938 } 4939 return $p; 4940 } 4941 4942 /** 4943 * Converts an HSL object to an RGB object with converted and rounded values. 4944 * 4945 * Direct port of TinyColor's function, lightly simplified to maintain 4946 * consistency with TinyColor. 4947 * 4948 * @link https://github.com/bgrins/TinyColor 4949 * 4950 * @since 5.8.0 4951 * @deprecated 6.3.0 4952 * 4953 * @access private 4954 * 4955 * @param array $hsl_color HSL object. 4956 * @return array Rounded and converted RGB object. 4957 */ 4958 function wp_tinycolor_hsl_to_rgb( $hsl_color ) { 4959 _deprecated_function( __FUNCTION__, '6.3.0' ); 4960 4961 $h = wp_tinycolor_bound01( $hsl_color['h'], 360 ); 4962 $s = wp_tinycolor_bound01( $hsl_color['s'], 100 ); 4963 $l = wp_tinycolor_bound01( $hsl_color['l'], 100 ); 4964 4965 if ( 0 === $s ) { 4966 // Achromatic. 4967 $r = $l; 4968 $g = $l; 4969 $b = $l; 4970 } else { 4971 $q = $l < 0.5 ? $l * ( 1 + $s ) : $l + $s - $l * $s; 4972 $p = 2 * $l - $q; 4973 $r = wp_tinycolor_hue_to_rgb( $p, $q, $h + 1 / 3 ); 4974 $g = wp_tinycolor_hue_to_rgb( $p, $q, $h ); 4975 $b = wp_tinycolor_hue_to_rgb( $p, $q, $h - 1 / 3 ); 4976 } 4977 4978 return array( 4979 'r' => $r * 255, 4980 'g' => $g * 255, 4981 'b' => $b * 255, 4982 ); 4983 } 4984 4985 /** 4986 * Parses hex, hsl, and rgb CSS strings using the same regex as TinyColor v1.4.2 4987 * used in the JavaScript. Only colors output from react-color are implemented. 4988 * 4989 * Direct port of TinyColor's function, lightly simplified to maintain 4990 * consistency with TinyColor. 4991 * 4992 * @link https://github.com/bgrins/TinyColor 4993 * @link https://github.com/casesandberg/react-color/ 4994 * 4995 * @since 5.8.0 4996 * @since 5.9.0 Added alpha processing. 4997 * @deprecated 6.3.0 4998 * 4999 * @access private 5000 * 5001 * @param string $color_str CSS color string. 5002 * @return array RGB object. 5003 */ 5004 function wp_tinycolor_string_to_rgb( $color_str ) { 5005 _deprecated_function( __FUNCTION__, '6.3.0' ); 5006 5007 $color_str = strtolower( trim( $color_str ) ); 5008 5009 $css_integer = '[-\\+]?\\d+%?'; 5010 $css_number = '[-\\+]?\\d*\\.\\d+%?'; 5011 5012 $css_unit = '(?:' . $css_number . ')|(?:' . $css_integer . ')'; 5013 5014 $permissive_match3 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?'; 5015 $permissive_match4 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?'; 5016 5017 $rgb_regexp = '/^rgb' . $permissive_match3 . '$/'; 5018 if ( preg_match( $rgb_regexp, $color_str, $match ) ) { 5019 $rgb = wp_tinycolor_rgb_to_rgb( 5020 array( 5021 'r' => $match[1], 5022 'g' => $match[2], 5023 'b' => $match[3], 5024 ) 5025 ); 5026 5027 $rgb['a'] = 1; 5028 5029 return $rgb; 5030 } 5031 5032 $rgba_regexp = '/^rgba' . $permissive_match4 . '$/'; 5033 if ( preg_match( $rgba_regexp, $color_str, $match ) ) { 5034 $rgb = wp_tinycolor_rgb_to_rgb( 5035 array( 5036 'r' => $match[1], 5037 'g' => $match[2], 5038 'b' => $match[3], 5039 ) 5040 ); 5041 5042 $rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] ); 5043 5044 return $rgb; 5045 } 5046 5047 $hsl_regexp = '/^hsl' . $permissive_match3 . '$/'; 5048 if ( preg_match( $hsl_regexp, $color_str, $match ) ) { 5049 $rgb = wp_tinycolor_hsl_to_rgb( 5050 array( 5051 'h' => $match[1], 5052 's' => $match[2], 5053 'l' => $match[3], 5054 ) 5055 ); 5056 5057 $rgb['a'] = 1; 5058 5059 return $rgb; 5060 } 5061 5062 $hsla_regexp = '/^hsla' . $permissive_match4 . '$/'; 5063 if ( preg_match( $hsla_regexp, $color_str, $match ) ) { 5064 $rgb = wp_tinycolor_hsl_to_rgb( 5065 array( 5066 'h' => $match[1], 5067 's' => $match[2], 5068 'l' => $match[3], 5069 ) 5070 ); 5071 5072 $rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] ); 5073 5074 return $rgb; 5075 } 5076 5077 $hex8_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; 5078 if ( preg_match( $hex8_regexp, $color_str, $match ) ) { 5079 $rgb = wp_tinycolor_rgb_to_rgb( 5080 array( 5081 'r' => base_convert( $match[1], 16, 10 ), 5082 'g' => base_convert( $match[2], 16, 10 ), 5083 'b' => base_convert( $match[3], 16, 10 ), 5084 ) 5085 ); 5086 5087 $rgb['a'] = _wp_tinycolor_bound_alpha( 5088 base_convert( $match[4], 16, 10 ) / 255 5089 ); 5090 5091 return $rgb; 5092 } 5093 5094 $hex6_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; 5095 if ( preg_match( $hex6_regexp, $color_str, $match ) ) { 5096 $rgb = wp_tinycolor_rgb_to_rgb( 5097 array( 5098 'r' => base_convert( $match[1], 16, 10 ), 5099 'g' => base_convert( $match[2], 16, 10 ), 5100 'b' => base_convert( $match[3], 16, 10 ), 5101 ) 5102 ); 5103 5104 $rgb['a'] = 1; 5105 5106 return $rgb; 5107 } 5108 5109 $hex4_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; 5110 if ( preg_match( $hex4_regexp, $color_str, $match ) ) { 5111 $rgb = wp_tinycolor_rgb_to_rgb( 5112 array( 5113 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 5114 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 5115 'b' => base_convert( $match[3] . $match[3], 16, 10 ), 5116 ) 5117 ); 5118 5119 $rgb['a'] = _wp_tinycolor_bound_alpha( 5120 base_convert( $match[4] . $match[4], 16, 10 ) / 255 5121 ); 5122 5123 return $rgb; 5124 } 5125 5126 $hex3_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; 5127 if ( preg_match( $hex3_regexp, $color_str, $match ) ) { 5128 $rgb = wp_tinycolor_rgb_to_rgb( 5129 array( 5130 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 5131 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 5132 'b' => base_convert( $match[3] . $match[3], 16, 10 ), 5133 ) 5134 ); 5135 5136 $rgb['a'] = 1; 5137 5138 return $rgb; 5139 } 5140 5141 /* 5142 * The JS color picker considers the string "transparent" to be a hex value, 5143 * so we need to handle it here as a special case. 5144 */ 5145 if ( 'transparent' === $color_str ) { 5146 return array( 5147 'r' => 0, 5148 'g' => 0, 5149 'b' => 0, 5150 'a' => 0, 5151 ); 5152 } 5153 } 5154 5155 /** 5156 * Returns the prefixed id for the duotone filter for use as a CSS id. 5157 * 5158 * @since 5.9.1 5159 * @deprecated 6.3.0 5160 * 5161 * @access private 5162 * 5163 * @param array $preset Duotone preset value as seen in theme.json. 5164 * @return string Duotone filter CSS id. 5165 */ 5166 function wp_get_duotone_filter_id( $preset ) { 5167 _deprecated_function( __FUNCTION__, '6.3.0' ); 5168 return WP_Duotone::get_filter_id_from_preset( $preset ); 5169 } 5170 5171 /** 5172 * Returns the CSS filter property url to reference the rendered SVG. 5173 * 5174 * @since 5.9.0 5175 * @since 6.1.0 Allow unset for preset colors. 5176 * @deprecated 6.3.0 5177 * 5178 * @access private 5179 * 5180 * @param array $preset Duotone preset value as seen in theme.json. 5181 * @return string Duotone CSS filter property url value. 5182 */ 5183 function wp_get_duotone_filter_property( $preset ) { 5184 _deprecated_function( __FUNCTION__, '6.3.0' ); 5185 return WP_Duotone::get_filter_css_property_value_from_preset( $preset ); 5186 } 5187 5188 /** 5189 * Returns the duotone filter SVG string for the preset. 5190 * 5191 * @since 5.9.1 5192 * @deprecated 6.3.0 Use WP_Duotone::get_filter_svg_from_preset() instead. 5193 * 5194 * @access private 5195 * 5196 * @param array $preset Duotone preset value as seen in theme.json. 5197 * @return string Duotone SVG filter. 5198 */ 5199 function wp_get_duotone_filter_svg( $preset ) { 5200 _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Duotone::get_filter_svg_from_preset()' ); 5201 return WP_Duotone::get_filter_svg_from_preset( $preset ); 5202 } 5203 5204 /** 5205 * Registers the style and colors block attributes for block types that support it. 5206 * 5207 * @since 5.8.0 5208 * @deprecated 6.3.0 Use WP_Duotone::register_duotone_support() instead. 5209 * 5210 * @access private 5211 * 5212 * @param WP_Block_Type $block_type Block Type. 5213 */ 5214 function wp_register_duotone_support( $block_type ) { 5215 _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Duotone::register_duotone_support()' ); 5216 return WP_Duotone::register_duotone_support( $block_type ); 5217 } 5218 5219 /** 5220 * Renders out the duotone stylesheet and SVG. 5221 * 5222 * @since 5.8.0 5223 * @since 6.1.0 Allow unset for preset colors. 5224 * @deprecated 6.3.0 Use WP_Duotone::render_duotone_support() instead. 5225 * 5226 * @access private 5227 * 5228 * @param string $block_content Rendered block content. 5229 * @param array $block Block object. 5230 * @return string Filtered block content. 5231 */ 5232 function wp_render_duotone_support( $block_content, $block ) { 5233 _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Duotone::render_duotone_support()' ); 5234 $wp_block = new WP_Block( $block ); 5235 return WP_Duotone::render_duotone_support( $block_content, $block, $wp_block ); 5236 } 5237 5238 /** 5239 * Returns a string containing the SVGs to be referenced as filters (duotone). 5240 * 5241 * @since 5.9.1 5242 * @deprecated 6.3.0 SVG generation is handled on a per-block basis in block supports. 5243 * 5244 * @return string 5245 */ 5246 function wp_get_global_styles_svg_filters() { 5247 _deprecated_function( __FUNCTION__, '6.3.0' ); 5248 5249 /* 5250 * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme 5251 * developer's workflow. 5252 */ 5253 $can_use_cached = ! wp_is_development_mode( 'theme' ); 5254 $cache_group = 'theme_json'; 5255 $cache_key = 'wp_get_global_styles_svg_filters'; 5256 if ( $can_use_cached ) { 5257 $cached = wp_cache_get( $cache_key, $cache_group ); 5258 if ( $cached ) { 5259 return $cached; 5260 } 5261 } 5262 5263 $supports_theme_json = wp_theme_has_theme_json(); 5264 5265 $origins = array( 'default', 'theme', 'custom' ); 5266 if ( ! $supports_theme_json ) { 5267 $origins = array( 'default' ); 5268 } 5269 5270 $tree = WP_Theme_JSON_Resolver::get_merged_data(); 5271 $svgs = $tree->get_svg_filters( $origins ); 5272 5273 if ( $can_use_cached ) { 5274 wp_cache_set( $cache_key, $svgs, $cache_group ); 5275 } 5276 5277 return $svgs; 5278 } 5279 5280 /** 5281 * Renders the SVG filters supplied by theme.json. 5282 * 5283 * Note that this doesn't render the per-block user-defined 5284 * filters which are handled by wp_render_duotone_support, 5285 * but it should be rendered before the filtered content 5286 * in the body to satisfy Safari's rendering quirks. 5287 * 5288 * @since 5.9.1 5289 * @deprecated 6.3.0 SVG generation is handled on a per-block basis in block supports. 5290 */ 5291 function wp_global_styles_render_svg_filters() { 5292 _deprecated_function( __FUNCTION__, '6.3.0' ); 5293 5294 /* 5295 * When calling via the in_admin_header action, we only want to render the 5296 * SVGs on block editor pages. 5297 */ 5298 if ( 5299 is_admin() && 5300 ! get_current_screen()->is_block_editor() 5301 ) { 5302 return; 5303 } 5304 5305 $filters = wp_get_global_styles_svg_filters(); 5306 if ( ! empty( $filters ) ) { 5307 echo $filters; 5308 } 5309 } 5310 5311 /** 5312 * Build an array with CSS classes and inline styles defining the colors 5313 * which will be applied to the navigation markup in the front-end. 5314 * 5315 * @since 5.9.0 5316 * @deprecated 6.3.0 This was removed from the Navigation Submenu block in favour of `wp_apply_colors_support()`. 5317 * `wp_apply_colors_support()` returns an array with similar class and style values, 5318 * but with different keys: `class` and `style`. 5319 * 5320 * @param array $context Navigation block context. 5321 * @param array $attributes Block attributes. 5322 * @param bool $is_sub_menu Whether the block is a sub-menu. 5323 * @return array Colors CSS classes and inline styles. 5324 */ 5325 function block_core_navigation_submenu_build_css_colors( $context, $attributes, $is_sub_menu = false ) { 5326 _deprecated_function( __FUNCTION__, '6.3.0' ); 5327 $colors = array( 5328 'css_classes' => array(), 5329 'inline_styles' => '', 5330 ); 5331 5332 // Text color. 5333 $named_text_color = null; 5334 $custom_text_color = null; 5335 5336 if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) { 5337 $custom_text_color = $context['customOverlayTextColor']; 5338 } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) { 5339 $named_text_color = $context['overlayTextColor']; 5340 } elseif ( array_key_exists( 'customTextColor', $context ) ) { 5341 $custom_text_color = $context['customTextColor']; 5342 } elseif ( array_key_exists( 'textColor', $context ) ) { 5343 $named_text_color = $context['textColor']; 5344 } elseif ( isset( $context['style']['color']['text'] ) ) { 5345 $custom_text_color = $context['style']['color']['text']; 5346 } 5347 5348 // If has text color. 5349 if ( ! is_null( $named_text_color ) ) { 5350 // Add the color class. 5351 array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) ); 5352 } elseif ( ! is_null( $custom_text_color ) ) { 5353 // Add the custom color inline style. 5354 $colors['css_classes'][] = 'has-text-color'; 5355 $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color ); 5356 } 5357 5358 // Background color. 5359 $named_background_color = null; 5360 $custom_background_color = null; 5361 5362 if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) { 5363 $custom_background_color = $context['customOverlayBackgroundColor']; 5364 } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) { 5365 $named_background_color = $context['overlayBackgroundColor']; 5366 } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) { 5367 $custom_background_color = $context['customBackgroundColor']; 5368 } elseif ( array_key_exists( 'backgroundColor', $context ) ) { 5369 $named_background_color = $context['backgroundColor']; 5370 } elseif ( isset( $context['style']['color']['background'] ) ) { 5371 $custom_background_color = $context['style']['color']['background']; 5372 } 5373 5374 // If has background color. 5375 if ( ! is_null( $named_background_color ) ) { 5376 // Add the background-color class. 5377 array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) ); 5378 } elseif ( ! is_null( $custom_background_color ) ) { 5379 // Add the custom background-color inline style. 5380 $colors['css_classes'][] = 'has-background'; 5381 $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color ); 5382 } 5383 5384 return $colors; 5385 } 5386 5387 /** 5388 * Runs the theme.json webfonts handler. 5389 * 5390 * Using `WP_Theme_JSON_Resolver`, it gets the fonts defined 5391 * in the `theme.json` for the current selection and style 5392 * variations, validates the font-face properties, generates 5393 * the '@font-face' style declarations, and then enqueues the 5394 * styles for both the editor and front-end. 5395 * 5396 * Design Notes: 5397 * This is not a public API, but rather an internal handler. 5398 * A future public Webfonts API will replace this stopgap code. 5399 * 5400 * This code design is intentional. 5401 * a. It hides the inner-workings. 5402 * b. It does not expose API ins or outs for consumption. 5403 * c. It only works with a theme's `theme.json`. 5404 * 5405 * Why? 5406 * a. To avoid backwards-compatibility issues when 5407 * the Webfonts API is introduced in Core. 5408 * b. To make `fontFace` declarations in `theme.json` work. 5409 * 5410 * @link https://github.com/WordPress/gutenberg/issues/40472 5411 * 5412 * @since 6.0.0 5413 * @deprecated 6.4.0 Use wp_print_font_faces() instead. 5414 * @access private 5415 */ 5416 function _wp_theme_json_webfonts_handler() { 5417 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_print_font_faces' ); 5418 5419 // Block themes are unavailable during installation. 5420 if ( wp_installing() ) { 5421 return; 5422 } 5423 5424 if ( ! wp_theme_has_theme_json() ) { 5425 return; 5426 } 5427 5428 // Webfonts to be processed. 5429 $registered_webfonts = array(); 5430 5431 /** 5432 * Gets the webfonts from theme.json. 5433 * 5434 * @since 6.0.0 5435 * 5436 * @return array Array of defined webfonts. 5437 */ 5438 $fn_get_webfonts_from_theme_json = static function() { 5439 // Get settings from theme.json. 5440 $settings = WP_Theme_JSON_Resolver::get_merged_data()->get_settings(); 5441 5442 // If in the editor, add webfonts defined in variations. 5443 if ( is_admin() || wp_is_rest_endpoint() ) { 5444 $variations = WP_Theme_JSON_Resolver::get_style_variations(); 5445 foreach ( $variations as $variation ) { 5446 // Skip if fontFamilies are not defined in the variation. 5447 if ( empty( $variation['settings']['typography']['fontFamilies'] ) ) { 5448 continue; 5449 } 5450 5451 // Initialize the array structure. 5452 if ( empty( $settings['typography'] ) ) { 5453 $settings['typography'] = array(); 5454 } 5455 if ( empty( $settings['typography']['fontFamilies'] ) ) { 5456 $settings['typography']['fontFamilies'] = array(); 5457 } 5458 if ( empty( $settings['typography']['fontFamilies']['theme'] ) ) { 5459 $settings['typography']['fontFamilies']['theme'] = array(); 5460 } 5461 5462 // Combine variations with settings. Remove duplicates. 5463 $settings['typography']['fontFamilies']['theme'] = array_merge( $settings['typography']['fontFamilies']['theme'], $variation['settings']['typography']['fontFamilies']['theme'] ); 5464 $settings['typography']['fontFamilies'] = array_unique( $settings['typography']['fontFamilies'] ); 5465 } 5466 } 5467 5468 // Bail out early if there are no settings for webfonts. 5469 if ( empty( $settings['typography']['fontFamilies'] ) ) { 5470 return array(); 5471 } 5472 5473 $webfonts = array(); 5474 5475 // Look for fontFamilies. 5476 foreach ( $settings['typography']['fontFamilies'] as $font_families ) { 5477 foreach ( $font_families as $font_family ) { 5478 5479 // Skip if fontFace is not defined. 5480 if ( empty( $font_family['fontFace'] ) ) { 5481 continue; 5482 } 5483 5484 // Skip if fontFace is not an array of webfonts. 5485 if ( ! is_array( $font_family['fontFace'] ) ) { 5486 continue; 5487 } 5488 5489 $webfonts = array_merge( $webfonts, $font_family['fontFace'] ); 5490 } 5491 } 5492 5493 return $webfonts; 5494 }; 5495 5496 /** 5497 * Transforms each 'src' into an URI by replacing 'file:./' 5498 * placeholder from theme.json. 5499 * 5500 * The absolute path to the webfont file(s) cannot be defined in 5501 * theme.json. `file:./` is the placeholder which is replaced by 5502 * the theme's URL path to the theme's root. 5503 * 5504 * @since 6.0.0 5505 * 5506 * @param array $src Webfont file(s) `src`. 5507 * @return array Webfont's `src` in URI. 5508 */ 5509 $fn_transform_src_into_uri = static function( array $src ) { 5510 foreach ( $src as $key => $url ) { 5511 // Tweak the URL to be relative to the theme root. 5512 if ( ! str_starts_with( $url, 'file:./' ) ) { 5513 continue; 5514 } 5515 5516 $src[ $key ] = get_theme_file_uri( str_replace( 'file:./', '', $url ) ); 5517 } 5518 5519 return $src; 5520 }; 5521 5522 /** 5523 * Converts the font-face properties (i.e. keys) into kebab-case. 5524 * 5525 * @since 6.0.0 5526 * 5527 * @param array $font_face Font face to convert. 5528 * @return array Font faces with each property in kebab-case format. 5529 */ 5530 $fn_convert_keys_to_kebab_case = static function( array $font_face ) { 5531 foreach ( $font_face as $property => $value ) { 5532 $kebab_case = _wp_to_kebab_case( $property ); 5533 $font_face[ $kebab_case ] = $value; 5534 if ( $kebab_case !== $property ) { 5535 unset( $font_face[ $property ] ); 5536 } 5537 } 5538 5539 return $font_face; 5540 }; 5541 5542 /** 5543 * Validates a webfont. 5544 * 5545 * @since 6.0.0 5546 * 5547 * @param array $webfont The webfont arguments. 5548 * @return array|false The validated webfont arguments, or false if the webfont is invalid. 5549 */ 5550 $fn_validate_webfont = static function( $webfont ) { 5551 $webfont = wp_parse_args( 5552 $webfont, 5553 array( 5554 'font-family' => '', 5555 'font-style' => 'normal', 5556 'font-weight' => '400', 5557 'font-display' => 'fallback', 5558 'src' => array(), 5559 ) 5560 ); 5561 5562 // Check the font-family. 5563 if ( empty( $webfont['font-family'] ) || ! is_string( $webfont['font-family'] ) ) { 5564 trigger_error( __( 'Webfont font family must be a non-empty string.' ) ); 5565 5566 return false; 5567 } 5568 5569 // Check that the `src` property is defined and a valid type. 5570 if ( empty( $webfont['src'] ) || ( ! is_string( $webfont['src'] ) && ! is_array( $webfont['src'] ) ) ) { 5571 trigger_error( __( 'Webfont src must be a non-empty string or an array of strings.' ) ); 5572 5573 return false; 5574 } 5575 5576 // Validate the `src` property. 5577 foreach ( (array) $webfont['src'] as $src ) { 5578 if ( ! is_string( $src ) || '' === trim( $src ) ) { 5579 trigger_error( __( 'Each webfont src must be a non-empty string.' ) ); 5580 5581 return false; 5582 } 5583 } 5584 5585 // Check the font-weight. 5586 if ( ! is_string( $webfont['font-weight'] ) && ! is_int( $webfont['font-weight'] ) ) { 5587 trigger_error( __( 'Webfont font weight must be a properly formatted string or integer.' ) ); 5588 5589 return false; 5590 } 5591 5592 // Check the font-display. 5593 if ( ! in_array( $webfont['font-display'], array( 'auto', 'block', 'fallback', 'optional', 'swap' ), true ) ) { 5594 $webfont['font-display'] = 'fallback'; 5595 } 5596 5597 $valid_props = array( 5598 'ascend-override', 5599 'descend-override', 5600 'font-display', 5601 'font-family', 5602 'font-stretch', 5603 'font-style', 5604 'font-weight', 5605 'font-variant', 5606 'font-feature-settings', 5607 'font-variation-settings', 5608 'line-gap-override', 5609 'size-adjust', 5610 'src', 5611 'unicode-range', 5612 ); 5613 5614 foreach ( $webfont as $prop => $value ) { 5615 if ( ! in_array( $prop, $valid_props, true ) ) { 5616 unset( $webfont[ $prop ] ); 5617 } 5618 } 5619 5620 return $webfont; 5621 }; 5622 5623 /** 5624 * Registers webfonts declared in theme.json. 5625 * 5626 * @since 6.0.0 5627 * 5628 * @uses $registered_webfonts To access and update the registered webfonts registry (passed by reference). 5629 * @uses $fn_get_webfonts_from_theme_json To run the function that gets the webfonts from theme.json. 5630 * @uses $fn_convert_keys_to_kebab_case To run the function that converts keys into kebab-case. 5631 * @uses $fn_validate_webfont To run the function that validates each font-face (webfont) from theme.json. 5632 */ 5633 $fn_register_webfonts = static function() use ( &$registered_webfonts, $fn_get_webfonts_from_theme_json, $fn_convert_keys_to_kebab_case, $fn_validate_webfont, $fn_transform_src_into_uri ) { 5634 $registered_webfonts = array(); 5635 5636 foreach ( $fn_get_webfonts_from_theme_json() as $webfont ) { 5637 if ( ! is_array( $webfont ) ) { 5638 continue; 5639 } 5640 5641 $webfont = $fn_convert_keys_to_kebab_case( $webfont ); 5642 5643 $webfont = $fn_validate_webfont( $webfont ); 5644 5645 $webfont['src'] = $fn_transform_src_into_uri( (array) $webfont['src'] ); 5646 5647 // Skip if not valid. 5648 if ( empty( $webfont ) ) { 5649 continue; 5650 } 5651 5652 $registered_webfonts[] = $webfont; 5653 } 5654 }; 5655 5656 /** 5657 * Orders 'src' items to optimize for browser support. 5658 * 5659 * @since 6.0.0 5660 * 5661 * @param array $webfont Webfont to process. 5662 * @return array Ordered `src` items. 5663 */ 5664 $fn_order_src = static function( array $webfont ) { 5665 $src = array(); 5666 $src_ordered = array(); 5667 5668 foreach ( $webfont['src'] as $url ) { 5669 // Add data URIs first. 5670 if ( str_starts_with( trim( $url ), 'data:' ) ) { 5671 $src_ordered[] = array( 5672 'url' => $url, 5673 'format' => 'data', 5674 ); 5675 continue; 5676 } 5677 $format = pathinfo( $url, PATHINFO_EXTENSION ); 5678 $src[ $format ] = $url; 5679 } 5680 5681 // Add woff2. 5682 if ( ! empty( $src['woff2'] ) ) { 5683 $src_ordered[] = array( 5684 'url' => sanitize_url( $src['woff2'] ), 5685 'format' => 'woff2', 5686 ); 5687 } 5688 5689 // Add woff. 5690 if ( ! empty( $src['woff'] ) ) { 5691 $src_ordered[] = array( 5692 'url' => sanitize_url( $src['woff'] ), 5693 'format' => 'woff', 5694 ); 5695 } 5696 5697 // Add ttf. 5698 if ( ! empty( $src['ttf'] ) ) { 5699 $src_ordered[] = array( 5700 'url' => sanitize_url( $src['ttf'] ), 5701 'format' => 'truetype', 5702 ); 5703 } 5704 5705 // Add eot. 5706 if ( ! empty( $src['eot'] ) ) { 5707 $src_ordered[] = array( 5708 'url' => sanitize_url( $src['eot'] ), 5709 'format' => 'embedded-opentype', 5710 ); 5711 } 5712 5713 // Add otf. 5714 if ( ! empty( $src['otf'] ) ) { 5715 $src_ordered[] = array( 5716 'url' => sanitize_url( $src['otf'] ), 5717 'format' => 'opentype', 5718 ); 5719 } 5720 $webfont['src'] = $src_ordered; 5721 5722 return $webfont; 5723 }; 5724 5725 /** 5726 * Compiles the 'src' into valid CSS. 5727 * 5728 * @since 6.0.0 5729 * @since 6.2.0 Removed local() CSS. 5730 * 5731 * @param string $font_family Font family. 5732 * @param array $value Value to process. 5733 * @return string The CSS. 5734 */ 5735 $fn_compile_src = static function( $font_family, array $value ) { 5736 $src = ''; 5737 5738 foreach ( $value as $item ) { 5739 $src .= ( 'data' === $item['format'] ) 5740 ? ", url({$item['url']})" 5741 : ", url('{$item['url']}') format('{$item['format']}')"; 5742 } 5743 5744 $src = ltrim( $src, ', ' ); 5745 5746 return $src; 5747 }; 5748 5749 /** 5750 * Compiles the font variation settings. 5751 * 5752 * @since 6.0.0 5753 * 5754 * @param array $font_variation_settings Array of font variation settings. 5755 * @return string The CSS. 5756 */ 5757 $fn_compile_variations = static function( array $font_variation_settings ) { 5758 $variations = ''; 5759 5760 foreach ( $font_variation_settings as $key => $value ) { 5761 $variations .= "$key $value"; 5762 } 5763 5764 return $variations; 5765 }; 5766 5767 /** 5768 * Builds the font-family's CSS. 5769 * 5770 * @since 6.0.0 5771 * 5772 * @uses $fn_compile_src To run the function that compiles the src. 5773 * @uses $fn_compile_variations To run the function that compiles the variations. 5774 * 5775 * @param array $webfont Webfont to process. 5776 * @return string This font-family's CSS. 5777 */ 5778 $fn_build_font_face_css = static function( array $webfont ) use ( $fn_compile_src, $fn_compile_variations ) { 5779 $css = ''; 5780 5781 // Wrap font-family in quotes if it contains spaces. 5782 if ( 5783 str_contains( $webfont['font-family'], ' ' ) && 5784 ! str_contains( $webfont['font-family'], '"' ) && 5785 ! str_contains( $webfont['font-family'], "'" ) 5786 ) { 5787 $webfont['font-family'] = '"' . $webfont['font-family'] . '"'; 5788 } 5789 5790 foreach ( $webfont as $key => $value ) { 5791 /* 5792 * Skip "provider", since it's for internal API use, 5793 * and not a valid CSS property. 5794 */ 5795 if ( 'provider' === $key ) { 5796 continue; 5797 } 5798 5799 // Compile the "src" parameter. 5800 if ( 'src' === $key ) { 5801 $value = $fn_compile_src( $webfont['font-family'], $value ); 5802 } 5803 5804 // If font-variation-settings is an array, convert it to a string. 5805 if ( 'font-variation-settings' === $key && is_array( $value ) ) { 5806 $value = $fn_compile_variations( $value ); 5807 } 5808 5809 if ( ! empty( $value ) ) { 5810 $css .= "$key:$value;"; 5811 } 5812 } 5813 5814 return $css; 5815 }; 5816 5817 /** 5818 * Gets the '@font-face' CSS styles for locally-hosted font files. 5819 * 5820 * @since 6.0.0 5821 * 5822 * @uses $registered_webfonts To access and update the registered webfonts registry (passed by reference). 5823 * @uses $fn_order_src To run the function that orders the src. 5824 * @uses $fn_build_font_face_css To run the function that builds the font-face CSS. 5825 * 5826 * @return string The `@font-face` CSS. 5827 */ 5828 $fn_get_css = static function() use ( &$registered_webfonts, $fn_order_src, $fn_build_font_face_css ) { 5829 $css = ''; 5830 5831 foreach ( $registered_webfonts as $webfont ) { 5832 // Order the webfont's `src` items to optimize for browser support. 5833 $webfont = $fn_order_src( $webfont ); 5834 5835 // Build the @font-face CSS for this webfont. 5836 $css .= '@font-face{' . $fn_build_font_face_css( $webfont ) . '}'; 5837 } 5838 5839 return $css; 5840 }; 5841 5842 /** 5843 * Generates and enqueues webfonts styles. 5844 * 5845 * @since 6.0.0 5846 * 5847 * @uses $fn_get_css To run the function that gets the CSS. 5848 */ 5849 $fn_generate_and_enqueue_styles = static function() use ( $fn_get_css ) { 5850 // Generate the styles. 5851 $styles = $fn_get_css(); 5852 5853 // Bail out if there are no styles to enqueue. 5854 if ( '' === $styles ) { 5855 return; 5856 } 5857 5858 // Enqueue the stylesheet. 5859 wp_register_style( 'wp-webfonts', '' ); 5860 wp_enqueue_style( 'wp-webfonts' ); 5861 5862 // Add the styles to the stylesheet. 5863 wp_add_inline_style( 'wp-webfonts', $styles ); 5864 }; 5865 5866 /** 5867 * Generates and enqueues editor styles. 5868 * 5869 * @since 6.0.0 5870 * 5871 * @uses $fn_get_css To run the function that gets the CSS. 5872 */ 5873 $fn_generate_and_enqueue_editor_styles = static function() use ( $fn_get_css ) { 5874 // Generate the styles. 5875 $styles = $fn_get_css(); 5876 5877 // Bail out if there are no styles to enqueue. 5878 if ( '' === $styles ) { 5879 return; 5880 } 5881 5882 wp_add_inline_style( 'wp-block-library', $styles ); 5883 }; 5884 5885 add_action( 'wp_loaded', $fn_register_webfonts ); 5886 add_action( 'wp_enqueue_scripts', $fn_generate_and_enqueue_styles ); 5887 add_action( 'admin_init', $fn_generate_and_enqueue_editor_styles ); 5888 } 5889 5890 /** 5891 * Prints the CSS in the embed iframe header. 5892 * 5893 * @since 4.4.0 5894 * @deprecated 6.4.0 Use wp_enqueue_embed_styles() instead. 5895 */ 5896 function print_embed_styles() { 5897 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_embed_styles' ); 5898 5899 $suffix = SCRIPT_DEBUG ? '' : '.min'; 5900 ?> 5901 <style> 5902 <?php echo file_get_contents( ABSPATH . WPINC . "/css/wp-embed-template$suffix.css" ); ?> 5903 </style> 5904 <?php 5905 } 5906 5907 /** 5908 * Prints the important emoji-related styles. 5909 * 5910 * @since 4.2.0 5911 * @deprecated 6.4.0 Use wp_enqueue_emoji_styles() instead. 5912 */ 5913 function print_emoji_styles() { 5914 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_emoji_styles' ); 5915 static $printed = false; 5916 5917 if ( $printed ) { 5918 return; 5919 } 5920 5921 $printed = true; 5922 5923 ?> 5924 <style> 5925 img.wp-smiley, 5926 img.emoji { 5927 display: inline !important; 5928 border: none !important; 5929 box-shadow: none !important; 5930 height: 1em !important; 5931 width: 1em !important; 5932 margin: 0 0.07em !important; 5933 vertical-align: -0.1em !important; 5934 background: none !important; 5935 padding: 0 !important; 5936 } 5937 </style> 5938 <?php 5939 } 5940 5941 /** 5942 * Prints style and scripts for the admin bar. 5943 * 5944 * @since 3.1.0 5945 * @deprecated 6.4.0 Use wp_enqueue_admin_bar_header_styles() instead. 5946 */ 5947 function wp_admin_bar_header() { 5948 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_admin_bar_header_styles' ); 5949 ?> 5950 <style media="print">#wpadminbar { display:none; }</style> 5951 <?php 5952 } 5953 5954 /** 5955 * Prints default admin bar callback. 5956 * 5957 * @since 3.1.0 5958 * @deprecated 6.4.0 Use wp_enqueue_admin_bar_bump_styles() instead. 5959 */ 5960 function _admin_bar_bump_cb() { 5961 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_admin_bar_bump_styles' ); 5962 ?> 5963 <style media="screen"> 5964 html { margin-top: 32px !important; } 5965 @media screen and ( max-width: 782px ) { 5966 html { margin-top: 46px !important; } 5967 } 5968 </style> 5969 <?php 5970 } 5971 5972 /** 5973 * Runs a remote HTTPS request to detect whether HTTPS supported, and stores potential errors. 5974 * 5975 * This internal function is called by a regular Cron hook to ensure HTTPS support is detected and maintained. 5976 * 5977 * @since 5.7.0 5978 * @deprecated 6.4.0 The `wp_update_https_detection_errors()` function is no longer used and has been replaced by 5979 * `wp_get_https_detection_errors()`. Previously the function was called by a regular Cron hook to 5980 * update the `https_detection_errors` option, but this is no longer necessary as the errors are 5981 * retrieved directly in Site Health and no longer used outside of Site Health. 5982 * @access private 5983 */ 5984 function wp_update_https_detection_errors() { 5985 _deprecated_function( __FUNCTION__, '6.4.0' ); 5986 5987 /** 5988 * Short-circuits the process of detecting errors related to HTTPS support. 5989 * 5990 * Returning a `WP_Error` from the filter will effectively short-circuit the default logic of trying a remote 5991 * request to the site over HTTPS, storing the errors array from the returned `WP_Error` instead. 5992 * 5993 * @since 5.7.0 5994 * @deprecated 6.4.0 The `wp_update_https_detection_errors` filter is no longer used and has been replaced by `pre_wp_get_https_detection_errors`. 5995 * 5996 * @param null|WP_Error $pre Error object to short-circuit detection, 5997 * or null to continue with the default behavior. 5998 */ 5999 $support_errors = apply_filters( 'pre_wp_update_https_detection_errors', null ); 6000 if ( is_wp_error( $support_errors ) ) { 6001 update_option( 'https_detection_errors', $support_errors->errors, false ); 6002 return; 6003 } 6004 6005 $support_errors = wp_get_https_detection_errors(); 6006 6007 update_option( 'https_detection_errors', $support_errors ); 6008 } 6009 6010 /** 6011 * Adds `decoding` attribute to an `img` HTML tag. 6012 * 6013 * The `decoding` attribute allows developers to indicate whether the 6014 * browser can decode the image off the main thread (`async`), on the 6015 * main thread (`sync`) or as determined by the browser (`auto`). 6016 * 6017 * By default WordPress adds `decoding="async"` to images but developers 6018 * can use the {@see 'wp_img_tag_add_decoding_attr'} filter to modify this 6019 * to remove the attribute or set it to another accepted value. 6020 * 6021 * @since 6.1.0 6022 * @deprecated 6.4.0 Use wp_img_tag_add_loading_optimization_attrs() instead. 6023 * @see wp_img_tag_add_loading_optimization_attrs() 6024 * 6025 * @param string $image The HTML `img` tag where the attribute should be added. 6026 * @param string $context Additional context to pass to the filters. 6027 * @return string Converted `img` tag with `decoding` attribute added. 6028 */ 6029 function wp_img_tag_add_decoding_attr( $image, $context ) { 6030 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_img_tag_add_loading_optimization_attrs()' ); 6031 6032 /* 6033 * Only apply the decoding attribute to images that have a src attribute that 6034 * starts with a double quote, ensuring escaped JSON is also excluded. 6035 */ 6036 if ( ! str_contains( $image, ' src="' ) ) { 6037 return $image; 6038 } 6039 6040 /** This action is documented in wp-includes/media.php */ 6041 $value = apply_filters( 'wp_img_tag_add_decoding_attr', 'async', $image, $context ); 6042 6043 if ( in_array( $value, array( 'async', 'sync', 'auto' ), true ) ) { 6044 $image = str_replace( '<img ', '<img decoding="' . esc_attr( $value ) . '" ', $image ); 6045 } 6046 6047 return $image; 6048 } 6049 6050 /** 6051 * Parses wp_template content and injects the active theme's 6052 * stylesheet as a theme attribute into each wp_template_part 6053 * 6054 * @since 5.9.0 6055 * @deprecated 6.4.0 Use traverse_and_serialize_blocks( parse_blocks( $template_content ), '_inject_theme_attribute_in_template_part_block' ) instead. 6056 * @access private 6057 * 6058 * @param string $template_content serialized wp_template content. 6059 * @return string Updated 'wp_template' content. 6060 */ 6061 function _inject_theme_attribute_in_block_template_content( $template_content ) { 6062 _deprecated_function( 6063 __FUNCTION__, 6064 '6.4.0', 6065 'traverse_and_serialize_blocks( parse_blocks( $template_content ), "_inject_theme_attribute_in_template_part_block" )' 6066 ); 6067 6068 $has_updated_content = false; 6069 $new_content = ''; 6070 $template_blocks = parse_blocks( $template_content ); 6071 6072 $blocks = _flatten_blocks( $template_blocks ); 6073 foreach ( $blocks as &$block ) { 6074 if ( 6075 'core/template-part' === $block['blockName'] && 6076 ! isset( $block['attrs']['theme'] ) 6077 ) { 6078 $block['attrs']['theme'] = get_stylesheet(); 6079 $has_updated_content = true; 6080 } 6081 } 6082 6083 if ( $has_updated_content ) { 6084 foreach ( $template_blocks as &$block ) { 6085 $new_content .= serialize_block( $block ); 6086 } 6087 6088 return $new_content; 6089 } 6090 6091 return $template_content; 6092 } 6093 6094 /** 6095 * Parses a block template and removes the theme attribute from each template part. 6096 * 6097 * @since 5.9.0 6098 * @deprecated 6.4.0 Use traverse_and_serialize_blocks( parse_blocks( $template_content ), '_remove_theme_attribute_from_template_part_block' ) instead. 6099 * @access private 6100 * 6101 * @param string $template_content Serialized block template content. 6102 * @return string Updated block template content. 6103 */ 6104 function _remove_theme_attribute_in_block_template_content( $template_content ) { 6105 _deprecated_function( 6106 __FUNCTION__, 6107 '6.4.0', 6108 'traverse_and_serialize_blocks( parse_blocks( $template_content ), "_remove_theme_attribute_from_template_part_block" )' 6109 ); 6110 6111 $has_updated_content = false; 6112 $new_content = ''; 6113 $template_blocks = parse_blocks( $template_content ); 6114 6115 $blocks = _flatten_blocks( $template_blocks ); 6116 foreach ( $blocks as $key => $block ) { 6117 if ( 'core/template-part' === $block['blockName'] && isset( $block['attrs']['theme'] ) ) { 6118 unset( $blocks[ $key ]['attrs']['theme'] ); 6119 $has_updated_content = true; 6120 } 6121 } 6122 6123 if ( ! $has_updated_content ) { 6124 return $template_content; 6125 } 6126 6127 foreach ( $template_blocks as $block ) { 6128 $new_content .= serialize_block( $block ); 6129 } 6130 6131 return $new_content; 6132 } 6133 6134 /** 6135 * Prints the skip-link script & styles. 6136 * 6137 * @since 5.8.0 6138 * @access private 6139 * @deprecated 6.4.0 Use wp_enqueue_block_template_skip_link() instead. 6140 * 6141 * @global string $_wp_current_template_content 6142 */ 6143 function the_block_template_skip_link() { 6144 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_block_template_skip_link()' ); 6145 6146 global $_wp_current_template_content; 6147 6148 // Early exit if not a block theme. 6149 if ( ! current_theme_supports( 'block-templates' ) ) { 6150 return; 6151 } 6152 6153 // Early exit if not a block template. 6154 if ( ! $_wp_current_template_content ) { 6155 return; 6156 } 6157 ?> 6158 6159 <?php 6160 /** 6161 * Print the skip-link styles. 6162 */ 6163 ?> 6164 <style id="skip-link-styles"> 6165 .skip-link.screen-reader-text { 6166 border: 0; 6167 clip-path: inset(50%); 6168 height: 1px; 6169 margin: -1px; 6170 overflow: hidden; 6171 padding: 0; 6172 position: absolute !important; 6173 width: 1px; 6174 /* Many screen reader and browser combinations announce broken words as they would appear visually. */ 6175 word-wrap: normal !important; 6176 word-break: normal !important; 6177 } 6178 6179 .skip-link.screen-reader-text:focus { 6180 background-color: #eee; 6181 clip-path: none; 6182 color: #444; 6183 display: block; 6184 font-size: 1em; 6185 height: auto; 6186 left: 5px; 6187 line-height: normal; 6188 padding: 15px 23px 14px; 6189 text-decoration: none; 6190 top: 5px; 6191 width: auto; 6192 z-index: 100000; 6193 } 6194 </style> 6195 <?php 6196 /** 6197 * Print the skip-link script. 6198 */ 6199 ?> 6200 <script> 6201 ( function() { 6202 var skipLinkTarget = document.querySelector( 'main' ), 6203 sibling, 6204 skipLinkTargetID, 6205 skipLink; 6206 6207 // Early exit if a skip-link target can't be located. 6208 if ( ! skipLinkTarget ) { 6209 return; 6210 } 6211 6212 /* 6213 * Get the site wrapper. 6214 * The skip-link will be injected in the beginning of it. 6215 */ 6216 sibling = document.querySelector( '.wp-site-blocks' ); 6217 6218 // Early exit if the root element was not found. 6219 if ( ! sibling ) { 6220 return; 6221 } 6222 6223 // Get the skip-link target's ID, and generate one if it doesn't exist. 6224 skipLinkTargetID = skipLinkTarget.id; 6225 if ( ! skipLinkTargetID ) { 6226 skipLinkTargetID = 'wp--skip-link--target'; 6227 skipLinkTarget.id = skipLinkTargetID; 6228 } 6229 6230 // Create the skip link. 6231 skipLink = document.createElement( 'a' ); 6232 skipLink.classList.add( 'skip-link', 'screen-reader-text' ); 6233 skipLink.href = '#' + skipLinkTargetID; 6234 skipLink.innerHTML = '<?php /* translators: Hidden accessibility text. */ esc_html_e( 'Skip to content' ); ?>'; 6235 6236 // Inject the skip link. 6237 sibling.parentElement.insertBefore( skipLink, sibling ); 6238 }() ); 6239 </script> 6240 <?php 6241 } 6242 6243 /** 6244 * Ensure that the view script has the `wp-interactivity` dependency. 6245 * 6246 * @since 6.4.0 6247 * @deprecated 6.5.0 6248 */ 6249 function block_core_query_ensure_interactivity_dependency() { 6250 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6251 } 6252 6253 /** 6254 * Ensure that the view script has the `wp-interactivity` dependency. 6255 * 6256 * @since 6.4.0 6257 * @deprecated 6.5.0 6258 */ 6259 function block_core_file_ensure_interactivity_dependency() { 6260 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6261 } 6262 6263 /** 6264 * Ensures that the view script has the `wp-interactivity` dependency. 6265 * 6266 * @since 6.4.0 6267 * @deprecated 6.5.0 6268 */ 6269 function block_core_image_ensure_interactivity_dependency() { 6270 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6271 } 6272 6273 /** 6274 * Updates the block content with elements class names. 6275 * 6276 * @deprecated 6.6.0 Generation of element class name is handled via `render_block_data` filter. 6277 * 6278 * @since 5.8.0 6279 * @since 6.4.0 Added support for button and heading element styling. 6280 * @access private 6281 * 6282 * @param string $block_content Rendered block content. 6283 * @param array $block Block object. 6284 * @return string Filtered block content. 6285 */ 6286 function wp_render_elements_support( $block_content, $block ) { 6287 _deprecated_function( __FUNCTION__, '6.6.0', 'wp_render_elements_class_name' ); 6288 return $block_content; 6289 } 6290 6291 /** 6292 * Processes the directives on the rendered HTML of the interactive blocks. 6293 * 6294 * This processes only one root interactive block at a time because the 6295 * rendered HTML of that block contains the rendered HTML of all its inner 6296 * blocks, including any interactive block. It does so by ignoring all the 6297 * interactive inner blocks until the root interactive block is processed. 6298 * 6299 * @since 6.5.0 6300 * @deprecated 6.6.0 6301 * 6302 * @param array $parsed_block The parsed block. 6303 * @return array The same parsed block. 6304 */ 6305 function wp_interactivity_process_directives_of_interactive_blocks( array $parsed_block ): array { 6306 _deprecated_function( __FUNCTION__, '6.6.0' ); 6307 return $parsed_block; 6308 } 6309 6310 /** 6311 * Gets the global styles custom CSS from theme.json. 6312 * 6313 * @since 6.2.0 6314 * @deprecated 6.7.0 Use {@see 'wp_get_global_stylesheet'} instead for top-level custom CSS, or {@see 'WP_Theme_JSON::get_styles_for_block'} for block-level custom CSS. 6315 * 6316 * @return string The global styles custom CSS. 6317 */ 6318 function wp_get_global_styles_custom_css() { 6319 _deprecated_function( __FUNCTION__, '6.7.0', 'wp_get_global_stylesheet' ); 6320 if ( ! wp_theme_has_theme_json() ) { 6321 return ''; 6322 } 6323 /* 6324 * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme 6325 * developer's workflow. 6326 */ 6327 $can_use_cached = ! wp_is_development_mode( 'theme' ); 6328 6329 /* 6330 * By using the 'theme_json' group, this data is marked to be non-persistent across requests. 6331 * @see `wp_cache_add_non_persistent_groups()`. 6332 * 6333 * The rationale for this is to make sure derived data from theme.json 6334 * is always fresh from the potential modifications done via hooks 6335 * that can use dynamic data (modify the stylesheet depending on some option, 6336 * settings depending on user permissions, etc.). 6337 * See some of the existing hooks to modify theme.json behavior: 6338 * @see https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/ 6339 * 6340 * A different alternative considered was to invalidate the cache upon certain 6341 * events such as options add/update/delete, user meta, etc. 6342 * It was judged not enough, hence this approach. 6343 * @see https://github.com/WordPress/gutenberg/pull/45372 6344 */ 6345 $cache_key = 'wp_get_global_styles_custom_css'; 6346 $cache_group = 'theme_json'; 6347 if ( $can_use_cached ) { 6348 $cached = wp_cache_get( $cache_key, $cache_group ); 6349 if ( $cached ) { 6350 return $cached; 6351 } 6352 } 6353 6354 $tree = WP_Theme_JSON_Resolver::get_merged_data(); 6355 $stylesheet = $tree->get_custom_css(); 6356 6357 if ( $can_use_cached ) { 6358 wp_cache_set( $cache_key, $stylesheet, $cache_group ); 6359 } 6360 6361 return $stylesheet; 6362 } 6363 6364 /** 6365 * Enqueues the global styles custom css defined via theme.json. 6366 * 6367 * @since 6.2.0 6368 * @deprecated 6.7.0 Use {@see 'wp_enqueue_global_styles'} instead. 6369 */ 6370 function wp_enqueue_global_styles_custom_css() { 6371 _deprecated_function( __FUNCTION__, '6.7.0', 'wp_enqueue_global_styles' ); 6372 if ( ! wp_is_block_theme() ) { 6373 return; 6374 } 6375 6376 // Don't enqueue Customizer's custom CSS separately. 6377 remove_action( 'wp_head', 'wp_custom_css_cb', 101 ); 6378 6379 $custom_css = wp_get_custom_css(); 6380 $custom_css .= wp_get_global_styles_custom_css(); 6381 6382 if ( ! empty( $custom_css ) ) { 6383 wp_add_inline_style( 'global-styles', $custom_css ); 6384 } 6385 } 6386 6387 /** 6388 * Generate block style variation instance name. 6389 * 6390 * @since 6.6.0 6391 * @deprecated 6.7.0 Use `wp_unique_id( $variation . '--' )` instead. 6392 * 6393 * @access private 6394 * 6395 * @param array $block Block object. 6396 * @param string $variation Slug for the block style variation. 6397 * 6398 * @return string The unique variation name. 6399 */ 6400 function wp_create_block_style_variation_instance_name( $block, $variation ) { 6401 _deprecated_function( __FUNCTION__, '6.7.0', 'wp_unique_id' ); 6402 return $variation . '--' . md5( serialize( $block ) ); 6403 } 6404 6405 /** 6406 * Returns whether the current user has the specified capability for a given site. 6407 * 6408 * @since 3.0.0 6409 * @since 5.3.0 Formalized the existing and already documented `...$args` parameter 6410 * by adding it to the function signature. 6411 * @since 5.8.0 Wraps current_user_can() after switching to blog. 6412 * @deprecated 6.7.0 Use current_user_can_for_site() instead. 6413 * 6414 * @param int $blog_id Site ID. 6415 * @param string $capability Capability name. 6416 * @param mixed ...$args Optional further parameters, typically starting with an object ID. 6417 * @return bool Whether the user has the given capability. 6418 */ 6419 function current_user_can_for_blog( $blog_id, $capability, ...$args ) { 6420 return current_user_can_for_site( $blog_id, $capability, ...$args ); 6421 } 6422 6423 /** 6424 * Loads classic theme styles on classic themes in the editor. 6425 * 6426 * This is used for backwards compatibility for Button and File blocks specifically. 6427 * 6428 * @since 6.1.0 6429 * @since 6.2.0 Added File block styles. 6430 * @deprecated 6.8.0 Styles are enqueued, not printed in the body element. 6431 * 6432 * @param array $editor_settings The array of editor settings. 6433 * @return array A filtered array of editor settings. 6434 */ 6435 function wp_add_editor_classic_theme_styles( $editor_settings ) { 6436 _deprecated_function( __FUNCTION__, '6.8.0', 'wp_enqueue_classic_theme_styles' ); 6437 6438 if ( wp_theme_has_theme_json() ) { 6439 return $editor_settings; 6440 } 6441 6442 $suffix = wp_scripts_get_suffix(); 6443 $classic_theme_styles = ABSPATH . WPINC . "/css/classic-themes$suffix.css"; 6444 6445 /* 6446 * This follows the pattern of get_block_editor_theme_styles, 6447 * but we can't use get_block_editor_theme_styles directly as it 6448 * only handles external files or theme files. 6449 */ 6450 $classic_theme_styles_settings = array( 6451 'css' => file_get_contents( $classic_theme_styles ), 6452 '__unstableType' => 'core', 6453 'isGlobalStyles' => false, 6454 ); 6455 6456 // Add these settings to the start of the array so that themes can override them. 6457 array_unshift( $editor_settings['styles'], $classic_theme_styles_settings ); 6458 6459 return $editor_settings; 6460 } 6461 6462 /** 6463 * Prints a CSS rule to fix potential visual issues with images using `sizes=auto`. 6464 * 6465 * This rule overrides the similar rule in the default user agent stylesheet, to avoid images that use e.g. 6466 * `width: auto` or `width: fit-content` to appear smaller. 6467 * 6468 * @since 6.7.1 6469 * @deprecated 6.9.0 Use wp_enqueue_img_auto_sizes_contain_css_fix() instead. 6470 * @see wp_enqueue_img_auto_sizes_contain_css_fix() 6471 * 6472 * @see https://html.spec.whatwg.org/multipage/rendering.html#img-contain-size 6473 * @see https://core.trac.wordpress.org/ticket/62413 6474 * @see https://core.trac.wordpress.org/ticket/62731 6475 */ 6476 function wp_print_auto_sizes_contain_css_fix() { 6477 _deprecated_function( __FUNCTION__, '6.9.0', 'wp_enqueue_img_auto_sizes_contain_css_fix' ); 6478 6479 /** This filter is documented in wp-includes/media.php */ 6480 $add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true ); 6481 if ( ! $add_auto_sizes ) { 6482 return; 6483 } 6484 6485 ?> 6486 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 6487 <?php 6488 } 6489 6490 /** 6491 * Adds slashes to a string or recursively adds slashes to strings within an array. 6492 * 6493 * This function is just a wrapper for `wp_slash()`. It was originally related to 6494 * magic quotes functionality which was deprecated in PHP 5.3.0 and removed in PHP 5.4.0. 6495 * 6496 * @since 0.71 6497 * @deprecated 7.0.0 Use wp_slash() instead. 6498 * @see wp_slash() 6499 * 6500 * @param string|array $gpc String or array of data to slash. 6501 * @return string|array Slashed `$gpc`. 6502 */ 6503 function addslashes_gpc( $gpc ) { 6504 _deprecated_function( __FUNCTION__, '7.0.0', 'wp_slash()' ); 6505 return wp_slash( $gpc ); 6506 } 6507 6508 /** 6509 * Sanitizes an attributes array into an attributes string to be placed inside a `<script>` tag. 6510 * 6511 * This function is deprecated, use {@see wp_get_script_tag()} or {@see wp_get_inline_script_tag()} instead. 6512 * 6513 * @since 5.7.0 6514 * @deprecated 7.0.0 Use wp_get_script_tag() or wp_get_inline_script_tag(). 6515 * @see wp_get_script_tag() 6516 * @see wp_get_inline_script_tag() 6517 * 6518 * @param array<string, string|bool> $attributes Key-value pairs representing `<script>` tag attributes. 6519 * @return string String made of sanitized `<script>` tag attributes. 6520 */ 6521 function wp_sanitize_script_attributes( $attributes ) { 6522 _deprecated_function( __FUNCTION__, '7.0.0', 'wp_get_script_tag() or wp_get_inline_script_tag()' ); 6523 6524 $attributes_string = ''; 6525 foreach ( $attributes as $attribute_name => $attribute_value ) { 6526 if ( is_bool( $attribute_value ) ) { 6527 if ( $attribute_value ) { 6528 $attributes_string .= ' ' . esc_attr( $attribute_name ); 6529 } 6530 } else { 6531 $attributes_string .= sprintf( ' %1$s="%2$s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) ); 6532 } 6533 } 6534 return $attributes_string; 6535 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Mon Jun 15 08:20:09 2026 | Cross-referenced by PHPXref |