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