[ 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 = __('None'); 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 != null && $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 santization 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 = (int) $log; 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 if ( function_exists( 'set_time_limit' ) ) { 3677 @set_time_limit( 60 ); 3678 } 3679 3680 if ( $red > 5 ) 3681 return false; 3682 3683 $options = array(); 3684 $options['redirection'] = 5; 3685 3686 if ( false == $file_path ) 3687 $options['method'] = 'HEAD'; 3688 else 3689 $options['method'] = 'GET'; 3690 3691 $response = wp_safe_remote_request( $url, $options ); 3692 3693 if ( is_wp_error( $response ) ) 3694 return false; 3695 3696 $headers = wp_remote_retrieve_headers( $response ); 3697 $headers['response'] = wp_remote_retrieve_response_code( $response ); 3698 3699 // WP_HTTP no longer follows redirects for HEAD requests. 3700 if ( 'HEAD' == $options['method'] && in_array($headers['response'], array(301, 302)) && isset( $headers['location'] ) ) { 3701 return wp_get_http( $headers['location'], $file_path, ++$red ); 3702 } 3703 3704 if ( false == $file_path ) 3705 return $headers; 3706 3707 // GET request - write it to the supplied filename. 3708 $out_fp = fopen($file_path, 'w'); 3709 if ( !$out_fp ) 3710 return $headers; 3711 3712 fwrite( $out_fp, wp_remote_retrieve_body( $response ) ); 3713 fclose($out_fp); 3714 clearstatcache(); 3715 3716 return $headers; 3717 } 3718 3719 /** 3720 * Whether SSL login should be forced. 3721 * 3722 * @since 2.6.0 3723 * @deprecated 4.4.0 Use force_ssl_admin() 3724 * @see force_ssl_admin() 3725 * 3726 * @param string|bool $force Optional Whether to force SSL login. Default null. 3727 * @return bool True if forced, false if not forced. 3728 */ 3729 function force_ssl_login( $force = null ) { 3730 _deprecated_function( __FUNCTION__, '4.4.0', 'force_ssl_admin()' ); 3731 return force_ssl_admin( $force ); 3732 } 3733 3734 /** 3735 * Retrieve path of comment popup template in current or parent template. 3736 * 3737 * @since 1.5.0 3738 * @deprecated 4.5.0 3739 * 3740 * @return string Full path to comments popup template file. 3741 */ 3742 function get_comments_popup_template() { 3743 _deprecated_function( __FUNCTION__, '4.5.0' ); 3744 3745 return ''; 3746 } 3747 3748 /** 3749 * Determines whether the current URL is within the comments popup window. 3750 * 3751 * For more information on this and similar theme functions, check out 3752 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ 3753 * Conditional Tags} article in the Theme Developer Handbook. 3754 * 3755 * @since 1.5.0 3756 * @deprecated 4.5.0 3757 * 3758 * @return false Always returns false. 3759 */ 3760 function is_comments_popup() { 3761 _deprecated_function( __FUNCTION__, '4.5.0' ); 3762 3763 return false; 3764 } 3765 3766 /** 3767 * Display the JS popup script to show a comment. 3768 * 3769 * @since 0.71 3770 * @deprecated 4.5.0 3771 */ 3772 function comments_popup_script() { 3773 _deprecated_function( __FUNCTION__, '4.5.0' ); 3774 } 3775 3776 /** 3777 * Adds element attributes to open links in new tabs. 3778 * 3779 * @since 0.71 3780 * @deprecated 4.5.0 3781 * 3782 * @param string $text Content to replace links to open in a new tab. 3783 * @return string Content that has filtered links. 3784 */ 3785 function popuplinks( $text ) { 3786 _deprecated_function( __FUNCTION__, '4.5.0' ); 3787 $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); 3788 return $text; 3789 } 3790 3791 /** 3792 * The Google Video embed handler callback. 3793 * 3794 * Deprecated function that previously assisted in turning Google Video URLs 3795 * into embeds but that service has since been shut down. 3796 * 3797 * @since 2.9.0 3798 * @deprecated 4.6.0 3799 * 3800 * @return string An empty string. 3801 */ 3802 function wp_embed_handler_googlevideo( $matches, $attr, $url, $rawattr ) { 3803 _deprecated_function( __FUNCTION__, '4.6.0' ); 3804 3805 return ''; 3806 } 3807 3808 /** 3809 * Retrieve path of paged template in current or parent template. 3810 * 3811 * @since 1.5.0 3812 * @deprecated 4.7.0 The paged.php template is no longer part of the theme template hierarchy. 3813 * 3814 * @return string Full path to paged template file. 3815 */ 3816 function get_paged_template() { 3817 _deprecated_function( __FUNCTION__, '4.7.0' ); 3818 3819 return get_query_template( 'paged' ); 3820 } 3821 3822 /** 3823 * Removes the HTML JavaScript entities found in early versions of Netscape 4. 3824 * 3825 * Previously, this function was pulled in from the original 3826 * import of kses and removed a specific vulnerability only 3827 * existent in early version of Netscape 4. However, this 3828 * vulnerability never affected any other browsers and can 3829 * be considered safe for the modern web. 3830 * 3831 * The regular expression which sanitized this vulnerability 3832 * has been removed in consideration of the performance and 3833 * energy demands it placed, now merely passing through its 3834 * input to the return. 3835 * 3836 * @since 1.0.0 3837 * @deprecated 4.7.0 Officially dropped security support for Netscape 4. 3838 * 3839 * @param string $content 3840 * @return string 3841 */ 3842 function wp_kses_js_entities( $content ) { 3843 _deprecated_function( __FUNCTION__, '4.7.0' ); 3844 3845 return preg_replace( '%&\s*\{[^}]*(\}\s*;?|$)%', '', $content ); 3846 } 3847 3848 /** 3849 * Sort categories by ID. 3850 * 3851 * Used by usort() as a callback, should not be used directly. Can actually be 3852 * used to sort any term object. 3853 * 3854 * @since 2.3.0 3855 * @deprecated 4.7.0 Use wp_list_sort() 3856 * @access private 3857 * 3858 * @param object $a 3859 * @param object $b 3860 * @return int 3861 */ 3862 function _usort_terms_by_ID( $a, $b ) { 3863 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3864 3865 if ( $a->term_id > $b->term_id ) 3866 return 1; 3867 elseif ( $a->term_id < $b->term_id ) 3868 return -1; 3869 else 3870 return 0; 3871 } 3872 3873 /** 3874 * Sort categories by name. 3875 * 3876 * Used by usort() as a callback, should not be used directly. Can actually be 3877 * used to sort any term object. 3878 * 3879 * @since 2.3.0 3880 * @deprecated 4.7.0 Use wp_list_sort() 3881 * @access private 3882 * 3883 * @param object $a 3884 * @param object $b 3885 * @return int 3886 */ 3887 function _usort_terms_by_name( $a, $b ) { 3888 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3889 3890 return strcmp( $a->name, $b->name ); 3891 } 3892 3893 /** 3894 * Sort menu items by the desired key. 3895 * 3896 * @since 3.0.0 3897 * @deprecated 4.7.0 Use wp_list_sort() 3898 * @access private 3899 * 3900 * @global string $_menu_item_sort_prop 3901 * 3902 * @param object $a The first object to compare 3903 * @param object $b The second object to compare 3904 * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b. 3905 */ 3906 function _sort_nav_menu_items( $a, $b ) { 3907 global $_menu_item_sort_prop; 3908 3909 _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort()' ); 3910 3911 if ( empty( $_menu_item_sort_prop ) ) 3912 return 0; 3913 3914 if ( ! isset( $a->$_menu_item_sort_prop ) || ! isset( $b->$_menu_item_sort_prop ) ) 3915 return 0; 3916 3917 $_a = (int) $a->$_menu_item_sort_prop; 3918 $_b = (int) $b->$_menu_item_sort_prop; 3919 3920 if ( $a->$_menu_item_sort_prop == $b->$_menu_item_sort_prop ) 3921 return 0; 3922 elseif ( $_a == $a->$_menu_item_sort_prop && $_b == $b->$_menu_item_sort_prop ) 3923 return $_a < $_b ? -1 : 1; 3924 else 3925 return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop ); 3926 } 3927 3928 /** 3929 * Retrieves the Press This bookmarklet link. 3930 * 3931 * @since 2.6.0 3932 * @deprecated 4.9.0 3933 * @return string 3934 */ 3935 function get_shortcut_link() { 3936 _deprecated_function( __FUNCTION__, '4.9.0' ); 3937 3938 $link = ''; 3939 3940 /** 3941 * Filters the Press This bookmarklet link. 3942 * 3943 * @since 2.6.0 3944 * @deprecated 4.9.0 3945 * 3946 * @param string $link The Press This bookmarklet link. 3947 */ 3948 return apply_filters( 'shortcut_link', $link ); 3949 } 3950 3951 /** 3952 * Ajax handler for saving a post from Press This. 3953 * 3954 * @since 4.2.0 3955 * @deprecated 4.9.0 3956 */ 3957 function wp_ajax_press_this_save_post() { 3958 _deprecated_function( __FUNCTION__, '4.9.0' ); 3959 if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) { 3960 include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; 3961 $wp_press_this = new WP_Press_This_Plugin(); 3962 $wp_press_this->save_post(); 3963 } else { 3964 wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) ); 3965 } 3966 } 3967 3968 /** 3969 * Ajax handler for creating new category from Press This. 3970 * 3971 * @since 4.2.0 3972 * @deprecated 4.9.0 3973 */ 3974 function wp_ajax_press_this_add_category() { 3975 _deprecated_function( __FUNCTION__, '4.9.0' ); 3976 if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) { 3977 include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; 3978 $wp_press_this = new WP_Press_This_Plugin(); 3979 $wp_press_this->add_category(); 3980 } else { 3981 wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) ); 3982 } 3983 } 3984 3985 /** 3986 * Return the user request object for the specified request ID. 3987 * 3988 * @since 4.9.6 3989 * @deprecated 5.4.0 Use wp_get_user_request() 3990 * @see wp_get_user_request() 3991 * 3992 * @param int $request_id The ID of the user request. 3993 * @return WP_User_Request|false 3994 */ 3995 function wp_get_user_request_data( $request_id ) { 3996 _deprecated_function( __FUNCTION__, '5.4.0', 'wp_get_user_request()' ); 3997 return wp_get_user_request( $request_id ); 3998 } 3999 4000 /** 4001 * Filters 'img' elements in post content to add 'srcset' and 'sizes' attributes. 4002 * 4003 * @since 4.4.0 4004 * @deprecated 5.5.0 4005 * 4006 * @see wp_image_add_srcset_and_sizes() 4007 * 4008 * @param string $content The raw post content to be filtered. 4009 * @return string Converted content with 'srcset' and 'sizes' attributes added to images. 4010 */ 4011 function wp_make_content_images_responsive( $content ) { 4012 _deprecated_function( __FUNCTION__, '5.5.0', 'wp_filter_content_tags()' ); 4013 4014 // This will also add the `loading` attribute to `img` tags, if enabled. 4015 return wp_filter_content_tags( $content ); 4016 } 4017 4018 /** 4019 * Turn register globals off. 4020 * 4021 * @since 2.1.0 4022 * @access private 4023 * @deprecated 5.5.0 4024 */ 4025 function wp_unregister_GLOBALS() { 4026 // register_globals was deprecated in PHP 5.3 and removed entirely in PHP 5.4. 4027 _deprecated_function( __FUNCTION__, '5.5.0' ); 4028 } 4029 4030 /** 4031 * Does comment contain disallowed characters or words. 4032 * 4033 * @since 1.5.0 4034 * @deprecated 5.5.0 Use wp_check_comment_disallowed_list() instead. 4035 * Please consider writing more inclusive code. 4036 * 4037 * @param string $author The author of the comment 4038 * @param string $email The email of the comment 4039 * @param string $url The url used in the comment 4040 * @param string $comment The comment content 4041 * @param string $user_ip The comment author's IP address 4042 * @param string $user_agent The author's browser user agent 4043 * @return bool True if comment contains disallowed content, false if comment does not 4044 */ 4045 function wp_blacklist_check( $author, $email, $url, $comment, $user_ip, $user_agent ) { 4046 _deprecated_function( __FUNCTION__, '5.5.0', 'wp_check_comment_disallowed_list()' ); 4047 4048 return wp_check_comment_disallowed_list( $author, $email, $url, $comment, $user_ip, $user_agent ); 4049 } 4050 4051 /** 4052 * Filters out `register_meta()` args based on an allowed list. 4053 * 4054 * `register_meta()` args may change over time, so requiring the allowed list 4055 * to be explicitly turned off is a warranty seal of sorts. 4056 * 4057 * @access private 4058 * @since 4.6.0 4059 * @deprecated 5.5.0 Use _wp_register_meta_args_allowed_list() instead. 4060 * Please consider writing more inclusive code. 4061 * 4062 * @param array $args Arguments from `register_meta()`. 4063 * @param array $default_args Default arguments for `register_meta()`. 4064 * @return array Filtered arguments. 4065 */ 4066 function _wp_register_meta_args_whitelist( $args, $default_args ) { 4067 _deprecated_function( __FUNCTION__, '5.5.0', '_wp_register_meta_args_allowed_list()' ); 4068 4069 return _wp_register_meta_args_allowed_list( $args, $default_args ); 4070 } 4071 4072 /** 4073 * Adds an array of options to the list of allowed options. 4074 * 4075 * @since 2.7.0 4076 * @deprecated 5.5.0 Use add_allowed_options() instead. 4077 * Please consider writing more inclusive code. 4078 * 4079 * @param array $new_options 4080 * @param string|array $options 4081 * @return array 4082 */ 4083 function add_option_whitelist( $new_options, $options = '' ) { 4084 _deprecated_function( __FUNCTION__, '5.5.0', 'add_allowed_options()' ); 4085 4086 return add_allowed_options( $new_options, $options ); 4087 } 4088 4089 /** 4090 * Removes a list of options from the allowed options list. 4091 * 4092 * @since 2.7.0 4093 * @deprecated 5.5.0 Use remove_allowed_options() instead. 4094 * Please consider writing more inclusive code. 4095 * 4096 * @param array $del_options 4097 * @param string|array $options 4098 * @return array 4099 */ 4100 function remove_option_whitelist( $del_options, $options = '' ) { 4101 _deprecated_function( __FUNCTION__, '5.5.0', 'remove_allowed_options()' ); 4102 4103 return remove_allowed_options( $del_options, $options ); 4104 } 4105 4106 /** 4107 * Adds slashes to only string values in an array of values. 4108 * 4109 * This should be used when preparing data for core APIs that expect slashed data. 4110 * This should not be used to escape data going directly into an SQL query. 4111 * 4112 * @since 5.3.0 4113 * @deprecated 5.6.0 Use wp_slash() 4114 * 4115 * @see wp_slash() 4116 * 4117 * @param mixed $value Scalar or array of scalars. 4118 * @return mixed Slashes $value 4119 */ 4120 function wp_slash_strings_only( $value ) { 4121 return map_deep( $value, 'addslashes_strings_only' ); 4122 } 4123 4124 /** 4125 * Adds slashes only if the provided value is a string. 4126 * 4127 * @since 5.3.0 4128 * @deprecated 5.6.0 4129 * 4130 * @see wp_slash() 4131 * 4132 * @param mixed $value 4133 * @return mixed 4134 */ 4135 function addslashes_strings_only( $value ) { 4136 return is_string( $value ) ? addslashes( $value ) : $value; 4137 } 4138 4139 /** 4140 * Displays a `noindex` meta tag if required by the blog configuration. 4141 * 4142 * If a blog is marked as not being public then the `noindex` meta tag will be 4143 * output to tell web robots not to index the page content. 4144 * 4145 * Typical usage is as a {@see 'wp_head'} callback: 4146 * 4147 * add_action( 'wp_head', 'noindex' ); 4148 * 4149 * @see wp_no_robots() 4150 * 4151 * @since 2.1.0 4152 * @deprecated 5.7.0 Use wp_robots_noindex() instead on 'wp_robots' filter. 4153 */ 4154 function noindex() { 4155 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_noindex()' ); 4156 4157 // If the blog is not public, tell robots to go away. 4158 if ( '0' == get_option( 'blog_public' ) ) { 4159 wp_no_robots(); 4160 } 4161 } 4162 4163 /** 4164 * Display a `noindex` meta tag. 4165 * 4166 * Outputs a `noindex` meta tag that tells web robots not to index the page content. 4167 * 4168 * Typical usage is as a {@see 'wp_head'} callback: 4169 * 4170 * add_action( 'wp_head', 'wp_no_robots' ); 4171 * 4172 * @since 3.3.0 4173 * @since 5.3.0 Echo `noindex,nofollow` if search engine visibility is discouraged. 4174 * @deprecated 5.7.0 Use wp_robots_no_robots() instead on 'wp_robots' filter. 4175 */ 4176 function wp_no_robots() { 4177 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_no_robots()' ); 4178 4179 if ( get_option( 'blog_public' ) ) { 4180 echo "<meta name='robots' content='noindex,follow' />\n"; 4181 return; 4182 } 4183 4184 echo "<meta name='robots' content='noindex,nofollow' />\n"; 4185 } 4186 4187 /** 4188 * Display a `noindex,noarchive` meta tag and referrer `strict-origin-when-cross-origin` meta tag. 4189 * 4190 * Outputs a `noindex,noarchive` meta tag that tells web robots not to index or cache the page content. 4191 * Outputs a referrer `strict-origin-when-cross-origin` meta tag that tells the browser not to send 4192 * the full URL as a referrer to other sites when cross-origin assets are loaded. 4193 * 4194 * Typical usage is as a {@see 'wp_head'} callback: 4195 * 4196 * add_action( 'wp_head', 'wp_sensitive_page_meta' ); 4197 * 4198 * @since 5.0.1 4199 * @deprecated 5.7.0 Use wp_robots_sensitive_page() instead on 'wp_robots' filter 4200 * and wp_strict_cross_origin_referrer() on 'wp_head' action. 4201 * 4202 * @see wp_robots_sensitive_page() 4203 */ 4204 function wp_sensitive_page_meta() { 4205 _deprecated_function( __FUNCTION__, '5.7.0', 'wp_robots_sensitive_page()' ); 4206 4207 ?> 4208 <meta name='robots' content='noindex,noarchive' /> 4209 <?php 4210 wp_strict_cross_origin_referrer(); 4211 } 4212 4213 /** 4214 * Render inner blocks from the `core/columns` block for generating an excerpt. 4215 * 4216 * @since 5.2.0 4217 * @access private 4218 * @deprecated 5.8.0 Use _excerpt_render_inner_blocks() introduced in 5.8.0. 4219 * 4220 * @see _excerpt_render_inner_blocks() 4221 * 4222 * @param array $columns The parsed columns block. 4223 * @param array $allowed_blocks The list of allowed inner blocks. 4224 * @return string The rendered inner blocks. 4225 */ 4226 function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) { 4227 _deprecated_function( __FUNCTION__, '5.8.0', '_excerpt_render_inner_blocks()' ); 4228 4229 return _excerpt_render_inner_blocks( $columns, $allowed_blocks ); 4230 } 4231 4232 /** 4233 * Renders the duotone filter SVG and returns the CSS filter property to 4234 * reference the rendered SVG. 4235 * 4236 * @since 5.9.0 4237 * @deprecated 5.9.1 Use wp_get_duotone_filter_property() introduced in 5.9.1. 4238 * 4239 * @see wp_get_duotone_filter_property() 4240 * 4241 * @param array $preset Duotone preset value as seen in theme.json. 4242 * @return string Duotone CSS filter property. 4243 */ 4244 function wp_render_duotone_filter_preset( $preset ) { 4245 _deprecated_function( __FUNCTION__, '5.9.1', 'wp_get_duotone_filter_property()' ); 4246 4247 return wp_get_duotone_filter_property( $preset ); 4248 } 4249 4250 /** 4251 * Checks whether serialization of the current block's border properties should occur. 4252 * 4253 * @since 5.8.0 4254 * @access private 4255 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4256 * 4257 * @see wp_should_skip_block_supports_serialization() 4258 * 4259 * @param WP_Block_Type $block_type Block type. 4260 * @return bool Whether serialization of the current block's border properties 4261 * should occur. 4262 */ 4263 function wp_skip_border_serialization( $block_type ) { 4264 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4265 4266 $border_support = isset( $block_type->supports['__experimentalBorder'] ) 4267 ? $block_type->supports['__experimentalBorder'] 4268 : false; 4269 4270 return is_array( $border_support ) && 4271 array_key_exists( '__experimentalSkipSerialization', $border_support ) && 4272 $border_support['__experimentalSkipSerialization']; 4273 } 4274 4275 /** 4276 * Checks whether serialization of the current block's dimensions properties should occur. 4277 * 4278 * @since 5.9.0 4279 * @access private 4280 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4281 * 4282 * @see wp_should_skip_block_supports_serialization() 4283 * 4284 * @param WP_Block_type $block_type Block type. 4285 * @return bool Whether to serialize spacing support styles & classes. 4286 */ 4287 function wp_skip_dimensions_serialization( $block_type ) { 4288 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4289 4290 $dimensions_support = isset( $block_type->supports['__experimentalDimensions'] ) 4291 ? $block_type->supports['__experimentalDimensions'] 4292 : false; 4293 4294 return is_array( $dimensions_support ) && 4295 array_key_exists( '__experimentalSkipSerialization', $dimensions_support ) && 4296 $dimensions_support['__experimentalSkipSerialization']; 4297 } 4298 4299 /** 4300 * Checks whether serialization of the current block's spacing properties should occur. 4301 * 4302 * @since 5.9.0 4303 * @access private 4304 * @deprecated 6.0.0 Use wp_should_skip_block_supports_serialization() introduced in 6.0.0. 4305 * 4306 * @see wp_should_skip_block_supports_serialization() 4307 * 4308 * @param WP_Block_Type $block_type Block type. 4309 * @return bool Whether to serialize spacing support styles & classes. 4310 */ 4311 function wp_skip_spacing_serialization( $block_type ) { 4312 _deprecated_function( __FUNCTION__, '6.0.0', 'wp_should_skip_block_supports_serialization()' ); 4313 4314 $spacing_support = isset( $block_type->supports['spacing'] ) 4315 ? $block_type->supports['spacing'] 4316 : false; 4317 4318 return is_array( $spacing_support ) && 4319 array_key_exists( '__experimentalSkipSerialization', $spacing_support ) && 4320 $spacing_support['__experimentalSkipSerialization']; 4321 } 4322 4323 /** 4324 * Inject the block editor assets that need to be loaded into the editor's iframe as an inline script. 4325 * 4326 * @since 5.8.0 4327 * @deprecated 6.0.0 4328 */ 4329 function wp_add_iframed_editor_assets_html() { 4330 _deprecated_function( __FUNCTION__, '6.0.0' ); 4331 } 4332 4333 /** 4334 * Retrieves thumbnail for an attachment. 4335 * Note that this works only for the (very) old image metadata style where 'thumb' was set, 4336 * and the 'sizes' array did not exist. This function returns false for the newer image metadata style 4337 * despite that 'thumbnail' is present in the 'sizes' array. 4338 * 4339 * @since 2.1.0 4340 * @deprecated 6.1.0 4341 * 4342 * @param int $post_id Optional. Attachment ID. Default is the ID of the global `$post`. 4343 * @return string|false Thumbnail file path on success, false on failure. 4344 */ 4345 function wp_get_attachment_thumb_file( $post_id = 0 ) { 4346 _deprecated_function( __FUNCTION__, '6.1.0' ); 4347 4348 $post_id = (int) $post_id; 4349 $post = get_post( $post_id ); 4350 4351 if ( ! $post ) { 4352 return false; 4353 } 4354 4355 // Use $post->ID rather than $post_id as get_post() may have used the global $post object. 4356 $imagedata = wp_get_attachment_metadata( $post->ID ); 4357 4358 if ( ! is_array( $imagedata ) ) { 4359 return false; 4360 } 4361 4362 $file = get_attached_file( $post->ID ); 4363 4364 if ( ! empty( $imagedata['thumb'] ) ) { 4365 $thumbfile = str_replace( wp_basename( $file ), $imagedata['thumb'], $file ); 4366 if ( file_exists( $thumbfile ) ) { 4367 /** 4368 * Filters the attachment thumbnail file path. 4369 * 4370 * @since 2.1.0 4371 * 4372 * @param string $thumbfile File path to the attachment thumbnail. 4373 * @param int $post_id Attachment ID. 4374 */ 4375 return apply_filters( 'wp_get_attachment_thumb_file', $thumbfile, $post->ID ); 4376 } 4377 } 4378 4379 return false; 4380 } 4381 4382 /** 4383 * Gets the path to a translation file for loading a textdomain just in time. 4384 * 4385 * Caches the retrieved results internally. 4386 * 4387 * @since 4.7.0 4388 * @deprecated 6.1.0 4389 * @access private 4390 * 4391 * @see _load_textdomain_just_in_time() 4392 * 4393 * @param string $domain Text domain. Unique identifier for retrieving translated strings. 4394 * @param bool $reset Whether to reset the internal cache. Used by the switch to locale functionality. 4395 * @return string|false The path to the translation file or false if no translation file was found. 4396 */ 4397 function _get_path_to_translation( $domain, $reset = false ) { 4398 _deprecated_function( __FUNCTION__, '6.1.0', 'WP_Textdomain_Registry' ); 4399 4400 static $available_translations = array(); 4401 4402 if ( true === $reset ) { 4403 $available_translations = array(); 4404 } 4405 4406 if ( ! isset( $available_translations[ $domain ] ) ) { 4407 $available_translations[ $domain ] = _get_path_to_translation_from_lang_dir( $domain ); 4408 } 4409 4410 return $available_translations[ $domain ]; 4411 } 4412 4413 /** 4414 * Gets the path to a translation file in the languages directory for the current locale. 4415 * 4416 * Holds a cached list of available .mo files to improve performance. 4417 * 4418 * @since 4.7.0 4419 * @deprecated 6.1.0 4420 * @access private 4421 * 4422 * @see _get_path_to_translation() 4423 * 4424 * @param string $domain Text domain. Unique identifier for retrieving translated strings. 4425 * @return string|false The path to the translation file or false if no translation file was found. 4426 */ 4427 function _get_path_to_translation_from_lang_dir( $domain ) { 4428 _deprecated_function( __FUNCTION__, '6.1.0', 'WP_Textdomain_Registry' ); 4429 4430 static $cached_mofiles = null; 4431 4432 if ( null === $cached_mofiles ) { 4433 $cached_mofiles = array(); 4434 4435 $locations = array( 4436 WP_LANG_DIR . '/plugins', 4437 WP_LANG_DIR . '/themes', 4438 ); 4439 4440 foreach ( $locations as $location ) { 4441 $mofiles = glob( $location . '/*.mo' ); 4442 if ( $mofiles ) { 4443 $cached_mofiles = array_merge( $cached_mofiles, $mofiles ); 4444 } 4445 } 4446 } 4447 4448 $locale = determine_locale(); 4449 $mofile = "{$domain}-{$locale}.mo"; 4450 4451 $path = WP_LANG_DIR . '/plugins/' . $mofile; 4452 if ( in_array( $path, $cached_mofiles, true ) ) { 4453 return $path; 4454 } 4455 4456 $path = WP_LANG_DIR . '/themes/' . $mofile; 4457 if ( in_array( $path, $cached_mofiles, true ) ) { 4458 return $path; 4459 } 4460 4461 return false; 4462 } 4463 4464 /** 4465 * Allows multiple block styles. 4466 * 4467 * @since 5.9.0 4468 * @deprecated 6.1.0 4469 * 4470 * @param array $metadata Metadata for registering a block type. 4471 * @return array Metadata for registering a block type. 4472 */ 4473 function _wp_multiple_block_styles( $metadata ) { 4474 _deprecated_function( __FUNCTION__, '6.1.0' ); 4475 return $metadata; 4476 } 4477 4478 /** 4479 * Generates an inline style for a typography feature e.g. text decoration, 4480 * text transform, and font style. 4481 * 4482 * @since 5.8.0 4483 * @access private 4484 * @deprecated 6.1.0 Use wp_style_engine_get_styles() introduced in 6.1.0. 4485 * 4486 * @see wp_style_engine_get_styles() 4487 * 4488 * @param array $attributes Block's attributes. 4489 * @param string $feature Key for the feature within the typography styles. 4490 * @param string $css_property Slug for the CSS property the inline style sets. 4491 * @return string CSS inline style. 4492 */ 4493 function wp_typography_get_css_variable_inline_style( $attributes, $feature, $css_property ) { 4494 _deprecated_function( __FUNCTION__, '6.1.0', 'wp_style_engine_get_styles()' ); 4495 4496 // Retrieve current attribute value or skip if not found. 4497 $style_value = _wp_array_get( $attributes, array( 'style', 'typography', $feature ), false ); 4498 if ( ! $style_value ) { 4499 return; 4500 } 4501 4502 // If we don't have a preset CSS variable, we'll assume it's a regular CSS value. 4503 if ( ! str_contains( $style_value, "var:preset|{$css_property}|" ) ) { 4504 return sprintf( '%s:%s;', $css_property, $style_value ); 4505 } 4506 4507 /* 4508 * We have a preset CSS variable as the style. 4509 * Get the style value from the string and return CSS style. 4510 */ 4511 $index_to_splice = strrpos( $style_value, '|' ) + 1; 4512 $slug = substr( $style_value, $index_to_splice ); 4513 4514 // Return the actual CSS inline style e.g. `text-decoration:var(--wp--preset--text-decoration--underline);`. 4515 return sprintf( '%s:var(--wp--preset--%s--%s);', $css_property, $css_property, $slug ); 4516 } 4517 4518 /** 4519 * Determines whether global terms are enabled. 4520 * 4521 * @since 3.0.0 4522 * @since 6.1.0 This function now always returns false. 4523 * @deprecated 6.1.0 4524 * 4525 * @return bool Always returns false. 4526 */ 4527 function global_terms_enabled() { 4528 _deprecated_function( __FUNCTION__, '6.1.0' ); 4529 4530 return false; 4531 } 4532 4533 /** 4534 * Filter the SQL clauses of an attachment query to include filenames. 4535 * 4536 * @since 4.7.0 4537 * @deprecated 6.0.3 4538 * @access private 4539 * 4540 * @param array $clauses An array including WHERE, GROUP BY, JOIN, ORDER BY, 4541 * DISTINCT, fields (SELECT), and LIMITS clauses. 4542 * @return array The unmodified clauses. 4543 */ 4544 function _filter_query_attachment_filenames( $clauses ) { 4545 _deprecated_function( __FUNCTION__, '6.0.3', 'add_filter( "wp_allow_query_attachment_by_filename", "__return_true" )' ); 4546 remove_filter( 'posts_clauses', __FUNCTION__ ); 4547 return $clauses; 4548 } 4549 4550 /** 4551 * Retrieves a page given its title. 4552 * 4553 * If more than one post uses the same title, the post with the smallest ID will be returned. 4554 * Be careful: in case of more than one post having the same title, it will check the oldest 4555 * publication date, not the smallest ID. 4556 * 4557 * Because this function uses the MySQL '=' comparison, $page_title will usually be matched 4558 * as case-insensitive with default collation. 4559 * 4560 * @since 2.1.0 4561 * @since 3.0.0 The `$post_type` parameter was added. 4562 * @deprecated 6.2.0 Use WP_Query. 4563 * 4564 * @global wpdb $wpdb WordPress database abstraction object. 4565 * 4566 * @param string $page_title Page title. 4567 * @param string $output Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which 4568 * correspond to a WP_Post object, an associative array, or a numeric array, 4569 * respectively. Default OBJECT. 4570 * @param string|array $post_type Optional. Post type or array of post types. Default 'page'. 4571 * @return WP_Post|array|null WP_Post (or array) on success, or null on failure. 4572 */ 4573 function get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) { 4574 _deprecated_function( __FUNCTION__, '6.2.0', 'WP_Query' ); 4575 global $wpdb; 4576 4577 if ( is_array( $post_type ) ) { 4578 $post_type = esc_sql( $post_type ); 4579 $post_type_in_string = "'" . implode( "','", $post_type ) . "'"; 4580 $sql = $wpdb->prepare( 4581 "SELECT ID 4582 FROM $wpdb->posts 4583 WHERE post_title = %s 4584 AND post_type IN ($post_type_in_string)", 4585 $page_title 4586 ); 4587 } else { 4588 $sql = $wpdb->prepare( 4589 "SELECT ID 4590 FROM $wpdb->posts 4591 WHERE post_title = %s 4592 AND post_type = %s", 4593 $page_title, 4594 $post_type 4595 ); 4596 } 4597 4598 $page = $wpdb->get_var( $sql ); 4599 4600 if ( $page ) { 4601 return get_post( $page, $output ); 4602 } 4603 4604 return null; 4605 } 4606 4607 /** 4608 * Returns the correct template for the site's home page. 4609 * 4610 * @access private 4611 * @since 6.0.0 4612 * @deprecated 6.2.0 Site Editor's server-side redirect for missing postType and postId 4613 * query args is removed. Thus, this function is no longer used. 4614 * 4615 * @return array|null A template object, or null if none could be found. 4616 */ 4617 function _resolve_home_block_template() { 4618 _deprecated_function( __FUNCTION__, '6.2.0' ); 4619 4620 $show_on_front = get_option( 'show_on_front' ); 4621 $front_page_id = get_option( 'page_on_front' ); 4622 4623 if ( 'page' === $show_on_front && $front_page_id ) { 4624 return array( 4625 'postType' => 'page', 4626 'postId' => $front_page_id, 4627 ); 4628 } 4629 4630 $hierarchy = array( 'front-page', 'home', 'index' ); 4631 $template = resolve_block_template( 'home', $hierarchy, '' ); 4632 4633 if ( ! $template ) { 4634 return null; 4635 } 4636 4637 return array( 4638 'postType' => 'wp_template', 4639 'postId' => $template->id, 4640 ); 4641 } 4642 4643 /** 4644 * Displays the link to the Windows Live Writer manifest file. 4645 * 4646 * @link https://msdn.microsoft.com/en-us/library/bb463265.aspx 4647 * @since 2.3.1 4648 * @deprecated 6.3.0 WLW manifest is no longer in use and no longer included in core, 4649 * so the output from this function is removed. 4650 */ 4651 function wlwmanifest_link() { 4652 _deprecated_function( __FUNCTION__, '6.3.0' ); 4653 } 4654 4655 /** 4656 * Queues comments for metadata lazy-loading. 4657 * 4658 * @since 4.5.0 4659 * @deprecated 6.3.0 Use wp_lazyload_comment_meta() instead. 4660 * 4661 * @param WP_Comment[] $comments Array of comment objects. 4662 */ 4663 function wp_queue_comments_for_comment_meta_lazyload( $comments ) { 4664 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_lazyload_comment_meta()' ); 4665 // Don't use `wp_list_pluck()` to avoid by-reference manipulation. 4666 $comment_ids = array(); 4667 if ( is_array( $comments ) ) { 4668 foreach ( $comments as $comment ) { 4669 if ( $comment instanceof WP_Comment ) { 4670 $comment_ids[] = $comment->comment_ID; 4671 } 4672 } 4673 } 4674 4675 wp_lazyload_comment_meta( $comment_ids ); 4676 } 4677 4678 /** 4679 * Gets the default value to use for a `loading` attribute on an element. 4680 * 4681 * This function should only be called for a tag and context if lazy-loading is generally enabled. 4682 * 4683 * The function usually returns 'lazy', but uses certain heuristics to guess whether the current element is likely to 4684 * appear above the fold, in which case it returns a boolean `false`, which will lead to the `loading` attribute being 4685 * omitted on the element. The purpose of this refinement is to avoid lazy-loading elements that are within the initial 4686 * viewport, which can have a negative performance impact. 4687 * 4688 * Under the hood, the function uses {@see wp_increase_content_media_count()} every time it is called for an element 4689 * within the main content. If the element is the very first content element, the `loading` attribute will be omitted. 4690 * This default threshold of 3 content elements to omit the `loading` attribute for can be customized using the 4691 * {@see 'wp_omit_loading_attr_threshold'} filter. 4692 * 4693 * @since 5.9.0 4694 * @deprecated 6.3.0 Use wp_get_loading_optimization_attributes() instead. 4695 * @see wp_get_loading_optimization_attributes() 4696 * 4697 * @global WP_Query $wp_query WordPress Query object. 4698 * 4699 * @param string $context Context for the element for which the `loading` attribute value is requested. 4700 * @return string|bool The default `loading` attribute value. Either 'lazy', 'eager', or a boolean `false`, to indicate 4701 * that the `loading` attribute should be skipped. 4702 */ 4703 function wp_get_loading_attr_default( $context ) { 4704 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_get_loading_optimization_attributes()' ); 4705 global $wp_query; 4706 4707 // Skip lazy-loading for the overall block template, as it is handled more granularly. 4708 if ( 'template' === $context ) { 4709 return false; 4710 } 4711 4712 /* 4713 * Do not lazy-load images in the header block template part, as they are likely above the fold. 4714 * For classic themes, this is handled in the condition below using the 'get_header' action. 4715 */ 4716 $header_area = WP_TEMPLATE_PART_AREA_HEADER; 4717 if ( "template_part_{$header_area}" === $context ) { 4718 return false; 4719 } 4720 4721 // Special handling for programmatically created image tags. 4722 if ( 'the_post_thumbnail' === $context || 'wp_get_attachment_image' === $context ) { 4723 /* 4724 * Skip programmatically created images within post content as they need to be handled together with the other 4725 * images within the post content. 4726 * Without this clause, they would already be counted below which skews the number and can result in the first 4727 * post content image being lazy-loaded only because there are images elsewhere in the post content. 4728 */ 4729 if ( doing_filter( 'the_content' ) ) { 4730 return false; 4731 } 4732 4733 // Conditionally skip lazy-loading on images before the loop. 4734 if ( 4735 // Only apply for main query but before the loop. 4736 $wp_query->before_loop && $wp_query->is_main_query() 4737 /* 4738 * Any image before the loop, but after the header has started should not be lazy-loaded, 4739 * except when the footer has already started which can happen when the current template 4740 * does not include any loop. 4741 */ 4742 && did_action( 'get_header' ) && ! did_action( 'get_footer' ) 4743 ) { 4744 return false; 4745 } 4746 } 4747 4748 /* 4749 * The first elements in 'the_content' or 'the_post_thumbnail' should not be lazy-loaded, 4750 * as they are likely above the fold. 4751 */ 4752 if ( 'the_content' === $context || 'the_post_thumbnail' === $context ) { 4753 // Only elements within the main query loop have special handling. 4754 if ( is_admin() || ! in_the_loop() || ! is_main_query() ) { 4755 return 'lazy'; 4756 } 4757 4758 // Increase the counter since this is a main query content element. 4759 $content_media_count = wp_increase_content_media_count(); 4760 4761 // If the count so far is below the threshold, return `false` so that the `loading` attribute is omitted. 4762 if ( $content_media_count <= wp_omit_loading_attr_threshold() ) { 4763 return false; 4764 } 4765 4766 // For elements after the threshold, lazy-load them as usual. 4767 return 'lazy'; 4768 } 4769 4770 // Lazy-load by default for any unknown context. 4771 return 'lazy'; 4772 } 4773 4774 /** 4775 * Adds `loading` attribute to an `img` HTML tag. 4776 * 4777 * @since 5.5.0 4778 * @deprecated 6.3.0 Use wp_img_tag_add_loading_optimization_attrs() instead. 4779 * @see wp_img_tag_add_loading_optimization_attrs() 4780 * 4781 * @param string $image The HTML `img` tag where the attribute should be added. 4782 * @param string $context Additional context to pass to the filters. 4783 * @return string Converted `img` tag with `loading` attribute added. 4784 */ 4785 function wp_img_tag_add_loading_attr( $image, $context ) { 4786 _deprecated_function( __FUNCTION__, '6.3.0', 'wp_img_tag_add_loading_optimization_attrs()' ); 4787 /* 4788 * Get loading attribute value to use. This must occur before the conditional check below so that even images that 4789 * are ineligible for being lazy-loaded are considered. 4790 */ 4791 $value = wp_get_loading_attr_default( $context ); 4792 4793 // Images should have source and dimension attributes for the `loading` attribute to be added. 4794 if ( ! str_contains( $image, ' src="' ) || ! str_contains( $image, ' width="' ) || ! str_contains( $image, ' height="' ) ) { 4795 return $image; 4796 } 4797 4798 /** This filter is documented in wp-admin/includes/media.php */ 4799 $value = apply_filters( 'wp_img_tag_add_loading_attr', $value, $image, $context ); 4800 4801 if ( $value ) { 4802 if ( ! in_array( $value, array( 'lazy', 'eager' ), true ) ) { 4803 $value = 'lazy'; 4804 } 4805 4806 return str_replace( '<img', '<img loading="' . esc_attr( $value ) . '"', $image ); 4807 } 4808 4809 return $image; 4810 } 4811 4812 /** 4813 * Takes input from [0, n] and returns it as [0, 1]. 4814 * 4815 * Direct port of TinyColor's function, lightly simplified to maintain 4816 * consistency with TinyColor. 4817 * 4818 * @link https://github.com/bgrins/TinyColor 4819 * 4820 * @since 5.8.0 4821 * @deprecated 6.3.0 4822 * 4823 * @access private 4824 * 4825 * @param mixed $n Number of unknown type. 4826 * @param int $max Upper value of the range to bound to. 4827 * @return float Value in the range [0, 1]. 4828 */ 4829 function wp_tinycolor_bound01( $n, $max ) { 4830 _deprecated_function( __FUNCTION__, '6.3.0' ); 4831 if ( 'string' === gettype( $n ) && str_contains( $n, '.' ) && 1 === (float) $n ) { 4832 $n = '100%'; 4833 } 4834 4835 $n = min( $max, max( 0, (float) $n ) ); 4836 4837 // Automatically convert percentage into number. 4838 if ( 'string' === gettype( $n ) && str_contains( $n, '%' ) ) { 4839 $n = (int) ( $n * $max ) / 100; 4840 } 4841 4842 // Handle floating point rounding errors. 4843 if ( ( abs( $n - $max ) < 0.000001 ) ) { 4844 return 1.0; 4845 } 4846 4847 // Convert into [0, 1] range if it isn't already. 4848 return ( $n % $max ) / (float) $max; 4849 } 4850 4851 /** 4852 * Direct port of tinycolor's boundAlpha function to maintain consistency with 4853 * how tinycolor works. 4854 * 4855 * @link https://github.com/bgrins/TinyColor 4856 * 4857 * @since 5.9.0 4858 * @deprecated 6.3.0 4859 * 4860 * @access private 4861 * 4862 * @param mixed $n Number of unknown type. 4863 * @return float Value in the range [0,1]. 4864 */ 4865 function _wp_tinycolor_bound_alpha( $n ) { 4866 _deprecated_function( __FUNCTION__, '6.3.0' ); 4867 4868 if ( is_numeric( $n ) ) { 4869 $n = (float) $n; 4870 if ( $n >= 0 && $n <= 1 ) { 4871 return $n; 4872 } 4873 } 4874 return 1; 4875 } 4876 4877 /** 4878 * Rounds and converts values of an RGB object. 4879 * 4880 * Direct port of TinyColor's function, lightly simplified to maintain 4881 * consistency with TinyColor. 4882 * 4883 * @link https://github.com/bgrins/TinyColor 4884 * 4885 * @since 5.8.0 4886 * @deprecated 6.3.0 4887 * 4888 * @access private 4889 * 4890 * @param array $rgb_color RGB object. 4891 * @return array Rounded and converted RGB object. 4892 */ 4893 function wp_tinycolor_rgb_to_rgb( $rgb_color ) { 4894 _deprecated_function( __FUNCTION__, '6.3.0' ); 4895 4896 return array( 4897 'r' => wp_tinycolor_bound01( $rgb_color['r'], 255 ) * 255, 4898 'g' => wp_tinycolor_bound01( $rgb_color['g'], 255 ) * 255, 4899 'b' => wp_tinycolor_bound01( $rgb_color['b'], 255 ) * 255, 4900 ); 4901 } 4902 4903 /** 4904 * Helper function for hsl to rgb conversion. 4905 * 4906 * Direct port of TinyColor's function, lightly simplified to maintain 4907 * consistency with TinyColor. 4908 * 4909 * @link https://github.com/bgrins/TinyColor 4910 * 4911 * @since 5.8.0 4912 * @deprecated 6.3.0 4913 * 4914 * @access private 4915 * 4916 * @param float $p first component. 4917 * @param float $q second component. 4918 * @param float $t third component. 4919 * @return float R, G, or B component. 4920 */ 4921 function wp_tinycolor_hue_to_rgb( $p, $q, $t ) { 4922 _deprecated_function( __FUNCTION__, '6.3.0' ); 4923 4924 if ( $t < 0 ) { 4925 ++$t; 4926 } 4927 if ( $t > 1 ) { 4928 --$t; 4929 } 4930 if ( $t < 1 / 6 ) { 4931 return $p + ( $q - $p ) * 6 * $t; 4932 } 4933 if ( $t < 1 / 2 ) { 4934 return $q; 4935 } 4936 if ( $t < 2 / 3 ) { 4937 return $p + ( $q - $p ) * ( 2 / 3 - $t ) * 6; 4938 } 4939 return $p; 4940 } 4941 4942 /** 4943 * Converts an HSL object to an RGB object with converted and rounded values. 4944 * 4945 * Direct port of TinyColor's function, lightly simplified to maintain 4946 * consistency with TinyColor. 4947 * 4948 * @link https://github.com/bgrins/TinyColor 4949 * 4950 * @since 5.8.0 4951 * @deprecated 6.3.0 4952 * 4953 * @access private 4954 * 4955 * @param array $hsl_color HSL object. 4956 * @return array Rounded and converted RGB object. 4957 */ 4958 function wp_tinycolor_hsl_to_rgb( $hsl_color ) { 4959 _deprecated_function( __FUNCTION__, '6.3.0' ); 4960 4961 $h = wp_tinycolor_bound01( $hsl_color['h'], 360 ); 4962 $s = wp_tinycolor_bound01( $hsl_color['s'], 100 ); 4963 $l = wp_tinycolor_bound01( $hsl_color['l'], 100 ); 4964 4965 if ( 0 === $s ) { 4966 // Achromatic. 4967 $r = $l; 4968 $g = $l; 4969 $b = $l; 4970 } else { 4971 $q = $l < 0.5 ? $l * ( 1 + $s ) : $l + $s - $l * $s; 4972 $p = 2 * $l - $q; 4973 $r = wp_tinycolor_hue_to_rgb( $p, $q, $h + 1 / 3 ); 4974 $g = wp_tinycolor_hue_to_rgb( $p, $q, $h ); 4975 $b = wp_tinycolor_hue_to_rgb( $p, $q, $h - 1 / 3 ); 4976 } 4977 4978 return array( 4979 'r' => $r * 255, 4980 'g' => $g * 255, 4981 'b' => $b * 255, 4982 ); 4983 } 4984 4985 /** 4986 * Parses hex, hsl, and rgb CSS strings using the same regex as TinyColor v1.4.2 4987 * used in the JavaScript. Only colors output from react-color are implemented. 4988 * 4989 * Direct port of TinyColor's function, lightly simplified to maintain 4990 * consistency with TinyColor. 4991 * 4992 * @link https://github.com/bgrins/TinyColor 4993 * @link https://github.com/casesandberg/react-color/ 4994 * 4995 * @since 5.8.0 4996 * @since 5.9.0 Added alpha processing. 4997 * @deprecated 6.3.0 4998 * 4999 * @access private 5000 * 5001 * @param string $color_str CSS color string. 5002 * @return array RGB object. 5003 */ 5004 function wp_tinycolor_string_to_rgb( $color_str ) { 5005 _deprecated_function( __FUNCTION__, '6.3.0' ); 5006 5007 $color_str = strtolower( trim( $color_str ) ); 5008 5009 $css_integer = '[-\\+]?\\d+%?'; 5010 $css_number = '[-\\+]?\\d*\\.\\d+%?'; 5011 5012 $css_unit = '(?:' . $css_number . ')|(?:' . $css_integer . ')'; 5013 5014 $permissive_match3 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?'; 5015 $permissive_match4 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?'; 5016 5017 $rgb_regexp = '/^rgb' . $permissive_match3 . '$/'; 5018 if ( preg_match( $rgb_regexp, $color_str, $match ) ) { 5019 $rgb = wp_tinycolor_rgb_to_rgb( 5020 array( 5021 'r' => $match[1], 5022 'g' => $match[2], 5023 'b' => $match[3], 5024 ) 5025 ); 5026 5027 $rgb['a'] = 1; 5028 5029 return $rgb; 5030 } 5031 5032 $rgba_regexp = '/^rgba' . $permissive_match4 . '$/'; 5033 if ( preg_match( $rgba_regexp, $color_str, $match ) ) { 5034 $rgb = wp_tinycolor_rgb_to_rgb( 5035 array( 5036 'r' => $match[1], 5037 'g' => $match[2], 5038 'b' => $match[3], 5039 ) 5040 ); 5041 5042 $rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] ); 5043 5044 return $rgb; 5045 } 5046 5047 $hsl_regexp = '/^hsl' . $permissive_match3 . '$/'; 5048 if ( preg_match( $hsl_regexp, $color_str, $match ) ) { 5049 $rgb = wp_tinycolor_hsl_to_rgb( 5050 array( 5051 'h' => $match[1], 5052 's' => $match[2], 5053 'l' => $match[3], 5054 ) 5055 ); 5056 5057 $rgb['a'] = 1; 5058 5059 return $rgb; 5060 } 5061 5062 $hsla_regexp = '/^hsla' . $permissive_match4 . '$/'; 5063 if ( preg_match( $hsla_regexp, $color_str, $match ) ) { 5064 $rgb = wp_tinycolor_hsl_to_rgb( 5065 array( 5066 'h' => $match[1], 5067 's' => $match[2], 5068 'l' => $match[3], 5069 ) 5070 ); 5071 5072 $rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] ); 5073 5074 return $rgb; 5075 } 5076 5077 $hex8_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; 5078 if ( preg_match( $hex8_regexp, $color_str, $match ) ) { 5079 $rgb = wp_tinycolor_rgb_to_rgb( 5080 array( 5081 'r' => base_convert( $match[1], 16, 10 ), 5082 'g' => base_convert( $match[2], 16, 10 ), 5083 'b' => base_convert( $match[3], 16, 10 ), 5084 ) 5085 ); 5086 5087 $rgb['a'] = _wp_tinycolor_bound_alpha( 5088 base_convert( $match[4], 16, 10 ) / 255 5089 ); 5090 5091 return $rgb; 5092 } 5093 5094 $hex6_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; 5095 if ( preg_match( $hex6_regexp, $color_str, $match ) ) { 5096 $rgb = wp_tinycolor_rgb_to_rgb( 5097 array( 5098 'r' => base_convert( $match[1], 16, 10 ), 5099 'g' => base_convert( $match[2], 16, 10 ), 5100 'b' => base_convert( $match[3], 16, 10 ), 5101 ) 5102 ); 5103 5104 $rgb['a'] = 1; 5105 5106 return $rgb; 5107 } 5108 5109 $hex4_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; 5110 if ( preg_match( $hex4_regexp, $color_str, $match ) ) { 5111 $rgb = wp_tinycolor_rgb_to_rgb( 5112 array( 5113 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 5114 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 5115 'b' => base_convert( $match[3] . $match[3], 16, 10 ), 5116 ) 5117 ); 5118 5119 $rgb['a'] = _wp_tinycolor_bound_alpha( 5120 base_convert( $match[4] . $match[4], 16, 10 ) / 255 5121 ); 5122 5123 return $rgb; 5124 } 5125 5126 $hex3_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; 5127 if ( preg_match( $hex3_regexp, $color_str, $match ) ) { 5128 $rgb = wp_tinycolor_rgb_to_rgb( 5129 array( 5130 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 5131 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 5132 'b' => base_convert( $match[3] . $match[3], 16, 10 ), 5133 ) 5134 ); 5135 5136 $rgb['a'] = 1; 5137 5138 return $rgb; 5139 } 5140 5141 /* 5142 * The JS color picker considers the string "transparent" to be a hex value, 5143 * so we need to handle it here as a special case. 5144 */ 5145 if ( 'transparent' === $color_str ) { 5146 return array( 5147 'r' => 0, 5148 'g' => 0, 5149 'b' => 0, 5150 'a' => 0, 5151 ); 5152 } 5153 } 5154 5155 /** 5156 * Returns the prefixed id for the duotone filter for use as a CSS id. 5157 * 5158 * @since 5.9.1 5159 * @deprecated 6.3.0 5160 * 5161 * @access private 5162 * 5163 * @param array $preset Duotone preset value as seen in theme.json. 5164 * @return string Duotone filter CSS id. 5165 */ 5166 function wp_get_duotone_filter_id( $preset ) { 5167 _deprecated_function( __FUNCTION__, '6.3.0' ); 5168 return WP_Duotone::get_filter_id_from_preset( $preset ); 5169 } 5170 5171 /** 5172 * Returns the CSS filter property url to reference the rendered SVG. 5173 * 5174 * @since 5.9.0 5175 * @since 6.1.0 Allow unset for preset colors. 5176 * @deprecated 6.3.0 5177 * 5178 * @access private 5179 * 5180 * @param array $preset Duotone preset value as seen in theme.json. 5181 * @return string Duotone CSS filter property url value. 5182 */ 5183 function wp_get_duotone_filter_property( $preset ) { 5184 _deprecated_function( __FUNCTION__, '6.3.0' ); 5185 return WP_Duotone::get_filter_css_property_value_from_preset( $preset ); 5186 } 5187 5188 /** 5189 * Returns the duotone filter SVG string for the preset. 5190 * 5191 * @since 5.9.1 5192 * @deprecated 6.3.0 5193 * 5194 * @access private 5195 * 5196 * @param array $preset Duotone preset value as seen in theme.json. 5197 * @return string Duotone SVG filter. 5198 */ 5199 function wp_get_duotone_filter_svg( $preset ) { 5200 _deprecated_function( __FUNCTION__, '6.3.0' ); 5201 return WP_Duotone::get_filter_svg_from_preset( $preset ); 5202 } 5203 5204 /** 5205 * Registers the style and colors block attributes for block types that support it. 5206 * 5207 * @since 5.8.0 5208 * @deprecated 6.3.0 Use WP_Duotone::register_duotone_support() instead. 5209 * 5210 * @access private 5211 * 5212 * @param WP_Block_Type $block_type Block Type. 5213 */ 5214 function wp_register_duotone_support( $block_type ) { 5215 _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Duotone::register_duotone_support()' ); 5216 return WP_Duotone::register_duotone_support( $block_type ); 5217 } 5218 5219 /** 5220 * Renders out the duotone stylesheet and SVG. 5221 * 5222 * @since 5.8.0 5223 * @since 6.1.0 Allow unset for preset colors. 5224 * @deprecated 6.3.0 Use WP_Duotone::render_duotone_support() instead. 5225 * 5226 * @access private 5227 * 5228 * @param string $block_content Rendered block content. 5229 * @param array $block Block object. 5230 * @return string Filtered block content. 5231 */ 5232 function wp_render_duotone_support( $block_content, $block ) { 5233 _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Duotone::render_duotone_support()' ); 5234 $wp_block = new WP_Block( $block ); 5235 return WP_Duotone::render_duotone_support( $block_content, $block, $wp_block ); 5236 } 5237 5238 /** 5239 * Returns a string containing the SVGs to be referenced as filters (duotone). 5240 * 5241 * @since 5.9.1 5242 * @deprecated 6.3.0 SVG generation is handled on a per-block basis in block supports. 5243 * 5244 * @return string 5245 */ 5246 function wp_get_global_styles_svg_filters() { 5247 _deprecated_function( __FUNCTION__, '6.3.0' ); 5248 5249 /* 5250 * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme 5251 * developer's workflow. 5252 */ 5253 $can_use_cached = ! wp_is_development_mode( 'theme' ); 5254 $cache_group = 'theme_json'; 5255 $cache_key = 'wp_get_global_styles_svg_filters'; 5256 if ( $can_use_cached ) { 5257 $cached = wp_cache_get( $cache_key, $cache_group ); 5258 if ( $cached ) { 5259 return $cached; 5260 } 5261 } 5262 5263 $supports_theme_json = wp_theme_has_theme_json(); 5264 5265 $origins = array( 'default', 'theme', 'custom' ); 5266 if ( ! $supports_theme_json ) { 5267 $origins = array( 'default' ); 5268 } 5269 5270 $tree = WP_Theme_JSON_Resolver::get_merged_data(); 5271 $svgs = $tree->get_svg_filters( $origins ); 5272 5273 if ( $can_use_cached ) { 5274 wp_cache_set( $cache_key, $svgs, $cache_group ); 5275 } 5276 5277 return $svgs; 5278 } 5279 5280 /** 5281 * Renders the SVG filters supplied by theme.json. 5282 * 5283 * Note that this doesn't render the per-block user-defined 5284 * filters which are handled by wp_render_duotone_support, 5285 * but it should be rendered before the filtered content 5286 * in the body to satisfy Safari's rendering quirks. 5287 * 5288 * @since 5.9.1 5289 * @deprecated 6.3.0 SVG generation is handled on a per-block basis in block supports. 5290 */ 5291 function wp_global_styles_render_svg_filters() { 5292 _deprecated_function( __FUNCTION__, '6.3.0' ); 5293 5294 /* 5295 * When calling via the in_admin_header action, we only want to render the 5296 * SVGs on block editor pages. 5297 */ 5298 if ( 5299 is_admin() && 5300 ! get_current_screen()->is_block_editor() 5301 ) { 5302 return; 5303 } 5304 5305 $filters = wp_get_global_styles_svg_filters(); 5306 if ( ! empty( $filters ) ) { 5307 echo $filters; 5308 } 5309 } 5310 5311 /** 5312 * Build an array with CSS classes and inline styles defining the colors 5313 * which will be applied to the navigation markup in the front-end. 5314 * 5315 * @since 5.9.0 5316 * @deprecated 6.3.0 This was removed from the Navigation Submenu block in favour of `wp_apply_colors_support()`. 5317 * `wp_apply_colors_support()` returns an array with similar class and style values, 5318 * but with different keys: `class` and `style`. 5319 * 5320 * @param array $context Navigation block context. 5321 * @param array $attributes Block attributes. 5322 * @param bool $is_sub_menu Whether the block is a sub-menu. 5323 * @return array Colors CSS classes and inline styles. 5324 */ 5325 function block_core_navigation_submenu_build_css_colors( $context, $attributes, $is_sub_menu = false ) { 5326 _deprecated_function( __FUNCTION__, '6.3.0' ); 5327 $colors = array( 5328 'css_classes' => array(), 5329 'inline_styles' => '', 5330 ); 5331 5332 // Text color. 5333 $named_text_color = null; 5334 $custom_text_color = null; 5335 5336 if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) { 5337 $custom_text_color = $context['customOverlayTextColor']; 5338 } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) { 5339 $named_text_color = $context['overlayTextColor']; 5340 } elseif ( array_key_exists( 'customTextColor', $context ) ) { 5341 $custom_text_color = $context['customTextColor']; 5342 } elseif ( array_key_exists( 'textColor', $context ) ) { 5343 $named_text_color = $context['textColor']; 5344 } elseif ( isset( $context['style']['color']['text'] ) ) { 5345 $custom_text_color = $context['style']['color']['text']; 5346 } 5347 5348 // If has text color. 5349 if ( ! is_null( $named_text_color ) ) { 5350 // Add the color class. 5351 array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) ); 5352 } elseif ( ! is_null( $custom_text_color ) ) { 5353 // Add the custom color inline style. 5354 $colors['css_classes'][] = 'has-text-color'; 5355 $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color ); 5356 } 5357 5358 // Background color. 5359 $named_background_color = null; 5360 $custom_background_color = null; 5361 5362 if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) { 5363 $custom_background_color = $context['customOverlayBackgroundColor']; 5364 } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) { 5365 $named_background_color = $context['overlayBackgroundColor']; 5366 } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) { 5367 $custom_background_color = $context['customBackgroundColor']; 5368 } elseif ( array_key_exists( 'backgroundColor', $context ) ) { 5369 $named_background_color = $context['backgroundColor']; 5370 } elseif ( isset( $context['style']['color']['background'] ) ) { 5371 $custom_background_color = $context['style']['color']['background']; 5372 } 5373 5374 // If has background color. 5375 if ( ! is_null( $named_background_color ) ) { 5376 // Add the background-color class. 5377 array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) ); 5378 } elseif ( ! is_null( $custom_background_color ) ) { 5379 // Add the custom background-color inline style. 5380 $colors['css_classes'][] = 'has-background'; 5381 $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color ); 5382 } 5383 5384 return $colors; 5385 } 5386 5387 /** 5388 * Runs the theme.json webfonts handler. 5389 * 5390 * Using `WP_Theme_JSON_Resolver`, it gets the fonts defined 5391 * in the `theme.json` for the current selection and style 5392 * variations, validates the font-face properties, generates 5393 * the '@font-face' style declarations, and then enqueues the 5394 * styles for both the editor and front-end. 5395 * 5396 * Design Notes: 5397 * This is not a public API, but rather an internal handler. 5398 * A future public Webfonts API will replace this stopgap code. 5399 * 5400 * This code design is intentional. 5401 * a. It hides the inner-workings. 5402 * b. It does not expose API ins or outs for consumption. 5403 * c. It only works with a theme's `theme.json`. 5404 * 5405 * Why? 5406 * a. To avoid backwards-compatibility issues when 5407 * the Webfonts API is introduced in Core. 5408 * b. To make `fontFace` declarations in `theme.json` work. 5409 * 5410 * @link https://github.com/WordPress/gutenberg/issues/40472 5411 * 5412 * @since 6.0.0 5413 * @deprecated 6.4.0 Use wp_print_font_faces() instead. 5414 * @access private 5415 */ 5416 function _wp_theme_json_webfonts_handler() { 5417 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_print_font_faces' ); 5418 5419 // Block themes are unavailable during installation. 5420 if ( wp_installing() ) { 5421 return; 5422 } 5423 5424 if ( ! wp_theme_has_theme_json() ) { 5425 return; 5426 } 5427 5428 // Webfonts to be processed. 5429 $registered_webfonts = array(); 5430 5431 /** 5432 * Gets the webfonts from theme.json. 5433 * 5434 * @since 6.0.0 5435 * 5436 * @return array Array of defined webfonts. 5437 */ 5438 $fn_get_webfonts_from_theme_json = static function() { 5439 // Get settings from theme.json. 5440 $settings = WP_Theme_JSON_Resolver::get_merged_data()->get_settings(); 5441 5442 // If in the editor, add webfonts defined in variations. 5443 if ( is_admin() || wp_is_rest_endpoint() ) { 5444 $variations = WP_Theme_JSON_Resolver::get_style_variations(); 5445 foreach ( $variations as $variation ) { 5446 // Skip if fontFamilies are not defined in the variation. 5447 if ( empty( $variation['settings']['typography']['fontFamilies'] ) ) { 5448 continue; 5449 } 5450 5451 // Initialize the array structure. 5452 if ( empty( $settings['typography'] ) ) { 5453 $settings['typography'] = array(); 5454 } 5455 if ( empty( $settings['typography']['fontFamilies'] ) ) { 5456 $settings['typography']['fontFamilies'] = array(); 5457 } 5458 if ( empty( $settings['typography']['fontFamilies']['theme'] ) ) { 5459 $settings['typography']['fontFamilies']['theme'] = array(); 5460 } 5461 5462 // Combine variations with settings. Remove duplicates. 5463 $settings['typography']['fontFamilies']['theme'] = array_merge( $settings['typography']['fontFamilies']['theme'], $variation['settings']['typography']['fontFamilies']['theme'] ); 5464 $settings['typography']['fontFamilies'] = array_unique( $settings['typography']['fontFamilies'] ); 5465 } 5466 } 5467 5468 // Bail out early if there are no settings for webfonts. 5469 if ( empty( $settings['typography']['fontFamilies'] ) ) { 5470 return array(); 5471 } 5472 5473 $webfonts = array(); 5474 5475 // Look for fontFamilies. 5476 foreach ( $settings['typography']['fontFamilies'] as $font_families ) { 5477 foreach ( $font_families as $font_family ) { 5478 5479 // Skip if fontFace is not defined. 5480 if ( empty( $font_family['fontFace'] ) ) { 5481 continue; 5482 } 5483 5484 // Skip if fontFace is not an array of webfonts. 5485 if ( ! is_array( $font_family['fontFace'] ) ) { 5486 continue; 5487 } 5488 5489 $webfonts = array_merge( $webfonts, $font_family['fontFace'] ); 5490 } 5491 } 5492 5493 return $webfonts; 5494 }; 5495 5496 /** 5497 * Transforms each 'src' into an URI by replacing 'file:./' 5498 * placeholder from theme.json. 5499 * 5500 * The absolute path to the webfont file(s) cannot be defined in 5501 * theme.json. `file:./` is the placeholder which is replaced by 5502 * the theme's URL path to the theme's root. 5503 * 5504 * @since 6.0.0 5505 * 5506 * @param array $src Webfont file(s) `src`. 5507 * @return array Webfont's `src` in URI. 5508 */ 5509 $fn_transform_src_into_uri = static function( array $src ) { 5510 foreach ( $src as $key => $url ) { 5511 // Tweak the URL to be relative to the theme root. 5512 if ( ! str_starts_with( $url, 'file:./' ) ) { 5513 continue; 5514 } 5515 5516 $src[ $key ] = get_theme_file_uri( str_replace( 'file:./', '', $url ) ); 5517 } 5518 5519 return $src; 5520 }; 5521 5522 /** 5523 * Converts the font-face properties (i.e. keys) into kebab-case. 5524 * 5525 * @since 6.0.0 5526 * 5527 * @param array $font_face Font face to convert. 5528 * @return array Font faces with each property in kebab-case format. 5529 */ 5530 $fn_convert_keys_to_kebab_case = static function( array $font_face ) { 5531 foreach ( $font_face as $property => $value ) { 5532 $kebab_case = _wp_to_kebab_case( $property ); 5533 $font_face[ $kebab_case ] = $value; 5534 if ( $kebab_case !== $property ) { 5535 unset( $font_face[ $property ] ); 5536 } 5537 } 5538 5539 return $font_face; 5540 }; 5541 5542 /** 5543 * Validates a webfont. 5544 * 5545 * @since 6.0.0 5546 * 5547 * @param array $webfont The webfont arguments. 5548 * @return array|false The validated webfont arguments, or false if the webfont is invalid. 5549 */ 5550 $fn_validate_webfont = static function( $webfont ) { 5551 $webfont = wp_parse_args( 5552 $webfont, 5553 array( 5554 'font-family' => '', 5555 'font-style' => 'normal', 5556 'font-weight' => '400', 5557 'font-display' => 'fallback', 5558 'src' => array(), 5559 ) 5560 ); 5561 5562 // Check the font-family. 5563 if ( empty( $webfont['font-family'] ) || ! is_string( $webfont['font-family'] ) ) { 5564 trigger_error( __( 'Webfont font family must be a non-empty string.' ) ); 5565 5566 return false; 5567 } 5568 5569 // Check that the `src` property is defined and a valid type. 5570 if ( empty( $webfont['src'] ) || ( ! is_string( $webfont['src'] ) && ! is_array( $webfont['src'] ) ) ) { 5571 trigger_error( __( 'Webfont src must be a non-empty string or an array of strings.' ) ); 5572 5573 return false; 5574 } 5575 5576 // Validate the `src` property. 5577 foreach ( (array) $webfont['src'] as $src ) { 5578 if ( ! is_string( $src ) || '' === trim( $src ) ) { 5579 trigger_error( __( 'Each webfont src must be a non-empty string.' ) ); 5580 5581 return false; 5582 } 5583 } 5584 5585 // Check the font-weight. 5586 if ( ! is_string( $webfont['font-weight'] ) && ! is_int( $webfont['font-weight'] ) ) { 5587 trigger_error( __( 'Webfont font weight must be a properly formatted string or integer.' ) ); 5588 5589 return false; 5590 } 5591 5592 // Check the font-display. 5593 if ( ! in_array( $webfont['font-display'], array( 'auto', 'block', 'fallback', 'optional', 'swap' ), true ) ) { 5594 $webfont['font-display'] = 'fallback'; 5595 } 5596 5597 $valid_props = array( 5598 'ascend-override', 5599 'descend-override', 5600 'font-display', 5601 'font-family', 5602 'font-stretch', 5603 'font-style', 5604 'font-weight', 5605 'font-variant', 5606 'font-feature-settings', 5607 'font-variation-settings', 5608 'line-gap-override', 5609 'size-adjust', 5610 'src', 5611 'unicode-range', 5612 ); 5613 5614 foreach ( $webfont as $prop => $value ) { 5615 if ( ! in_array( $prop, $valid_props, true ) ) { 5616 unset( $webfont[ $prop ] ); 5617 } 5618 } 5619 5620 return $webfont; 5621 }; 5622 5623 /** 5624 * Registers webfonts declared in theme.json. 5625 * 5626 * @since 6.0.0 5627 * 5628 * @uses $registered_webfonts To access and update the registered webfonts registry (passed by reference). 5629 * @uses $fn_get_webfonts_from_theme_json To run the function that gets the webfonts from theme.json. 5630 * @uses $fn_convert_keys_to_kebab_case To run the function that converts keys into kebab-case. 5631 * @uses $fn_validate_webfont To run the function that validates each font-face (webfont) from theme.json. 5632 */ 5633 $fn_register_webfonts = static function() use ( &$registered_webfonts, $fn_get_webfonts_from_theme_json, $fn_convert_keys_to_kebab_case, $fn_validate_webfont, $fn_transform_src_into_uri ) { 5634 $registered_webfonts = array(); 5635 5636 foreach ( $fn_get_webfonts_from_theme_json() as $webfont ) { 5637 if ( ! is_array( $webfont ) ) { 5638 continue; 5639 } 5640 5641 $webfont = $fn_convert_keys_to_kebab_case( $webfont ); 5642 5643 $webfont = $fn_validate_webfont( $webfont ); 5644 5645 $webfont['src'] = $fn_transform_src_into_uri( (array) $webfont['src'] ); 5646 5647 // Skip if not valid. 5648 if ( empty( $webfont ) ) { 5649 continue; 5650 } 5651 5652 $registered_webfonts[] = $webfont; 5653 } 5654 }; 5655 5656 /** 5657 * Orders 'src' items to optimize for browser support. 5658 * 5659 * @since 6.0.0 5660 * 5661 * @param array $webfont Webfont to process. 5662 * @return array Ordered `src` items. 5663 */ 5664 $fn_order_src = static function( array $webfont ) { 5665 $src = array(); 5666 $src_ordered = array(); 5667 5668 foreach ( $webfont['src'] as $url ) { 5669 // Add data URIs first. 5670 if ( str_starts_with( trim( $url ), 'data:' ) ) { 5671 $src_ordered[] = array( 5672 'url' => $url, 5673 'format' => 'data', 5674 ); 5675 continue; 5676 } 5677 $format = pathinfo( $url, PATHINFO_EXTENSION ); 5678 $src[ $format ] = $url; 5679 } 5680 5681 // Add woff2. 5682 if ( ! empty( $src['woff2'] ) ) { 5683 $src_ordered[] = array( 5684 'url' => sanitize_url( $src['woff2'] ), 5685 'format' => 'woff2', 5686 ); 5687 } 5688 5689 // Add woff. 5690 if ( ! empty( $src['woff'] ) ) { 5691 $src_ordered[] = array( 5692 'url' => sanitize_url( $src['woff'] ), 5693 'format' => 'woff', 5694 ); 5695 } 5696 5697 // Add ttf. 5698 if ( ! empty( $src['ttf'] ) ) { 5699 $src_ordered[] = array( 5700 'url' => sanitize_url( $src['ttf'] ), 5701 'format' => 'truetype', 5702 ); 5703 } 5704 5705 // Add eot. 5706 if ( ! empty( $src['eot'] ) ) { 5707 $src_ordered[] = array( 5708 'url' => sanitize_url( $src['eot'] ), 5709 'format' => 'embedded-opentype', 5710 ); 5711 } 5712 5713 // Add otf. 5714 if ( ! empty( $src['otf'] ) ) { 5715 $src_ordered[] = array( 5716 'url' => sanitize_url( $src['otf'] ), 5717 'format' => 'opentype', 5718 ); 5719 } 5720 $webfont['src'] = $src_ordered; 5721 5722 return $webfont; 5723 }; 5724 5725 /** 5726 * Compiles the 'src' into valid CSS. 5727 * 5728 * @since 6.0.0 5729 * @since 6.2.0 Removed local() CSS. 5730 * 5731 * @param string $font_family Font family. 5732 * @param array $value Value to process. 5733 * @return string The CSS. 5734 */ 5735 $fn_compile_src = static function( $font_family, array $value ) { 5736 $src = ''; 5737 5738 foreach ( $value as $item ) { 5739 $src .= ( 'data' === $item['format'] ) 5740 ? ", url({$item['url']})" 5741 : ", url('{$item['url']}') format('{$item['format']}')"; 5742 } 5743 5744 $src = ltrim( $src, ', ' ); 5745 5746 return $src; 5747 }; 5748 5749 /** 5750 * Compiles the font variation settings. 5751 * 5752 * @since 6.0.0 5753 * 5754 * @param array $font_variation_settings Array of font variation settings. 5755 * @return string The CSS. 5756 */ 5757 $fn_compile_variations = static function( array $font_variation_settings ) { 5758 $variations = ''; 5759 5760 foreach ( $font_variation_settings as $key => $value ) { 5761 $variations .= "$key $value"; 5762 } 5763 5764 return $variations; 5765 }; 5766 5767 /** 5768 * Builds the font-family's CSS. 5769 * 5770 * @since 6.0.0 5771 * 5772 * @uses $fn_compile_src To run the function that compiles the src. 5773 * @uses $fn_compile_variations To run the function that compiles the variations. 5774 * 5775 * @param array $webfont Webfont to process. 5776 * @return string This font-family's CSS. 5777 */ 5778 $fn_build_font_face_css = static function( array $webfont ) use ( $fn_compile_src, $fn_compile_variations ) { 5779 $css = ''; 5780 5781 // Wrap font-family in quotes if it contains spaces. 5782 if ( 5783 str_contains( $webfont['font-family'], ' ' ) && 5784 ! str_contains( $webfont['font-family'], '"' ) && 5785 ! str_contains( $webfont['font-family'], "'" ) 5786 ) { 5787 $webfont['font-family'] = '"' . $webfont['font-family'] . '"'; 5788 } 5789 5790 foreach ( $webfont as $key => $value ) { 5791 /* 5792 * Skip "provider", since it's for internal API use, 5793 * and not a valid CSS property. 5794 */ 5795 if ( 'provider' === $key ) { 5796 continue; 5797 } 5798 5799 // Compile the "src" parameter. 5800 if ( 'src' === $key ) { 5801 $value = $fn_compile_src( $webfont['font-family'], $value ); 5802 } 5803 5804 // If font-variation-settings is an array, convert it to a string. 5805 if ( 'font-variation-settings' === $key && is_array( $value ) ) { 5806 $value = $fn_compile_variations( $value ); 5807 } 5808 5809 if ( ! empty( $value ) ) { 5810 $css .= "$key:$value;"; 5811 } 5812 } 5813 5814 return $css; 5815 }; 5816 5817 /** 5818 * Gets the '@font-face' CSS styles for locally-hosted font files. 5819 * 5820 * @since 6.0.0 5821 * 5822 * @uses $registered_webfonts To access and update the registered webfonts registry (passed by reference). 5823 * @uses $fn_order_src To run the function that orders the src. 5824 * @uses $fn_build_font_face_css To run the function that builds the font-face CSS. 5825 * 5826 * @return string The `@font-face` CSS. 5827 */ 5828 $fn_get_css = static function() use ( &$registered_webfonts, $fn_order_src, $fn_build_font_face_css ) { 5829 $css = ''; 5830 5831 foreach ( $registered_webfonts as $webfont ) { 5832 // Order the webfont's `src` items to optimize for browser support. 5833 $webfont = $fn_order_src( $webfont ); 5834 5835 // Build the @font-face CSS for this webfont. 5836 $css .= '@font-face{' . $fn_build_font_face_css( $webfont ) . '}'; 5837 } 5838 5839 return $css; 5840 }; 5841 5842 /** 5843 * Generates and enqueues webfonts styles. 5844 * 5845 * @since 6.0.0 5846 * 5847 * @uses $fn_get_css To run the function that gets the CSS. 5848 */ 5849 $fn_generate_and_enqueue_styles = static function() use ( $fn_get_css ) { 5850 // Generate the styles. 5851 $styles = $fn_get_css(); 5852 5853 // Bail out if there are no styles to enqueue. 5854 if ( '' === $styles ) { 5855 return; 5856 } 5857 5858 // Enqueue the stylesheet. 5859 wp_register_style( 'wp-webfonts', '' ); 5860 wp_enqueue_style( 'wp-webfonts' ); 5861 5862 // Add the styles to the stylesheet. 5863 wp_add_inline_style( 'wp-webfonts', $styles ); 5864 }; 5865 5866 /** 5867 * Generates and enqueues editor styles. 5868 * 5869 * @since 6.0.0 5870 * 5871 * @uses $fn_get_css To run the function that gets the CSS. 5872 */ 5873 $fn_generate_and_enqueue_editor_styles = static function() use ( $fn_get_css ) { 5874 // Generate the styles. 5875 $styles = $fn_get_css(); 5876 5877 // Bail out if there are no styles to enqueue. 5878 if ( '' === $styles ) { 5879 return; 5880 } 5881 5882 wp_add_inline_style( 'wp-block-library', $styles ); 5883 }; 5884 5885 add_action( 'wp_loaded', $fn_register_webfonts ); 5886 add_action( 'wp_enqueue_scripts', $fn_generate_and_enqueue_styles ); 5887 add_action( 'admin_init', $fn_generate_and_enqueue_editor_styles ); 5888 } 5889 5890 /** 5891 * Prints the CSS in the embed iframe header. 5892 * 5893 * @since 4.4.0 5894 * @deprecated 6.4.0 Use wp_enqueue_embed_styles() instead. 5895 */ 5896 function print_embed_styles() { 5897 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_embed_styles' ); 5898 5899 $type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"'; 5900 $suffix = SCRIPT_DEBUG ? '' : '.min'; 5901 ?> 5902 <style<?php echo $type_attr; ?>> 5903 <?php echo file_get_contents( ABSPATH . WPINC . "/css/wp-embed-template$suffix.css" ); ?> 5904 </style> 5905 <?php 5906 } 5907 5908 /** 5909 * Prints the important emoji-related styles. 5910 * 5911 * @since 4.2.0 5912 * @deprecated 6.4.0 Use wp_enqueue_emoji_styles() instead. 5913 */ 5914 function print_emoji_styles() { 5915 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_emoji_styles' ); 5916 static $printed = false; 5917 5918 if ( $printed ) { 5919 return; 5920 } 5921 5922 $printed = true; 5923 5924 $type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"'; 5925 ?> 5926 <style<?php echo $type_attr; ?>> 5927 img.wp-smiley, 5928 img.emoji { 5929 display: inline !important; 5930 border: none !important; 5931 box-shadow: none !important; 5932 height: 1em !important; 5933 width: 1em !important; 5934 margin: 0 0.07em !important; 5935 vertical-align: -0.1em !important; 5936 background: none !important; 5937 padding: 0 !important; 5938 } 5939 </style> 5940 <?php 5941 } 5942 5943 /** 5944 * Prints style and scripts for the admin bar. 5945 * 5946 * @since 3.1.0 5947 * @deprecated 6.4.0 Use wp_enqueue_admin_bar_header_styles() instead. 5948 */ 5949 function wp_admin_bar_header() { 5950 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_admin_bar_header_styles' ); 5951 $type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"'; 5952 ?> 5953 <style<?php echo $type_attr; ?> media="print">#wpadminbar { display:none; }</style> 5954 <?php 5955 } 5956 5957 /** 5958 * Prints default admin bar callback. 5959 * 5960 * @since 3.1.0 5961 * @deprecated 6.4.0 Use wp_enqueue_admin_bar_bump_styles() instead. 5962 */ 5963 function _admin_bar_bump_cb() { 5964 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_admin_bar_bump_styles' ); 5965 $type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"'; 5966 ?> 5967 <style<?php echo $type_attr; ?> media="screen"> 5968 html { margin-top: 32px !important; } 5969 @media screen and ( max-width: 782px ) { 5970 html { margin-top: 46px !important; } 5971 } 5972 </style> 5973 <?php 5974 } 5975 5976 /** 5977 * Runs a remote HTTPS request to detect whether HTTPS supported, and stores potential errors. 5978 * 5979 * This internal function is called by a regular Cron hook to ensure HTTPS support is detected and maintained. 5980 * 5981 * @since 5.7.0 5982 * @deprecated 6.4.0 The `wp_update_https_detection_errors()` function is no longer used and has been replaced by 5983 * `wp_get_https_detection_errors()`. Previously the function was called by a regular Cron hook to 5984 * update the `https_detection_errors` option, but this is no longer necessary as the errors are 5985 * retrieved directly in Site Health and no longer used outside of Site Health. 5986 * @access private 5987 */ 5988 function wp_update_https_detection_errors() { 5989 _deprecated_function( __FUNCTION__, '6.4.0' ); 5990 5991 /** 5992 * Short-circuits the process of detecting errors related to HTTPS support. 5993 * 5994 * Returning a `WP_Error` from the filter will effectively short-circuit the default logic of trying a remote 5995 * request to the site over HTTPS, storing the errors array from the returned `WP_Error` instead. 5996 * 5997 * @since 5.7.0 5998 * @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`. 5999 * 6000 * @param null|WP_Error $pre Error object to short-circuit detection, 6001 * or null to continue with the default behavior. 6002 */ 6003 $support_errors = apply_filters( 'pre_wp_update_https_detection_errors', null ); 6004 if ( is_wp_error( $support_errors ) ) { 6005 update_option( 'https_detection_errors', $support_errors->errors ); 6006 return; 6007 } 6008 6009 $support_errors = wp_get_https_detection_errors(); 6010 6011 update_option( 'https_detection_errors', $support_errors ); 6012 } 6013 6014 /** 6015 * Adds `decoding` attribute to an `img` HTML tag. 6016 * 6017 * The `decoding` attribute allows developers to indicate whether the 6018 * browser can decode the image off the main thread (`async`), on the 6019 * main thread (`sync`) or as determined by the browser (`auto`). 6020 * 6021 * By default WordPress adds `decoding="async"` to images but developers 6022 * can use the {@see 'wp_img_tag_add_decoding_attr'} filter to modify this 6023 * to remove the attribute or set it to another accepted value. 6024 * 6025 * @since 6.1.0 6026 * @deprecated 6.4.0 Use wp_img_tag_add_loading_optimization_attrs() instead. 6027 * @see wp_img_tag_add_loading_optimization_attrs() 6028 * 6029 * @param string $image The HTML `img` tag where the attribute should be added. 6030 * @param string $context Additional context to pass to the filters. 6031 * @return string Converted `img` tag with `decoding` attribute added. 6032 */ 6033 function wp_img_tag_add_decoding_attr( $image, $context ) { 6034 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_img_tag_add_loading_optimization_attrs()' ); 6035 6036 /* 6037 * Only apply the decoding attribute to images that have a src attribute that 6038 * starts with a double quote, ensuring escaped JSON is also excluded. 6039 */ 6040 if ( ! str_contains( $image, ' src="' ) ) { 6041 return $image; 6042 } 6043 6044 /** This action is documented in wp-includes/media.php */ 6045 $value = apply_filters( 'wp_img_tag_add_decoding_attr', 'async', $image, $context ); 6046 6047 if ( in_array( $value, array( 'async', 'sync', 'auto' ), true ) ) { 6048 $image = str_replace( '<img ', '<img decoding="' . esc_attr( $value ) . '" ', $image ); 6049 } 6050 6051 return $image; 6052 } 6053 6054 /** 6055 * Parses wp_template content and injects the active theme's 6056 * stylesheet as a theme attribute into each wp_template_part 6057 * 6058 * @since 5.9.0 6059 * @deprecated 6.4.0 Use traverse_and_serialize_blocks( parse_blocks( $template_content ), '_inject_theme_attribute_in_template_part_block' ) instead. 6060 * @access private 6061 * 6062 * @param string $template_content serialized wp_template content. 6063 * @return string Updated 'wp_template' content. 6064 */ 6065 function _inject_theme_attribute_in_block_template_content( $template_content ) { 6066 _deprecated_function( 6067 __FUNCTION__, 6068 '6.4.0', 6069 'traverse_and_serialize_blocks( parse_blocks( $template_content ), "_inject_theme_attribute_in_template_part_block" )' 6070 ); 6071 6072 $has_updated_content = false; 6073 $new_content = ''; 6074 $template_blocks = parse_blocks( $template_content ); 6075 6076 $blocks = _flatten_blocks( $template_blocks ); 6077 foreach ( $blocks as &$block ) { 6078 if ( 6079 'core/template-part' === $block['blockName'] && 6080 ! isset( $block['attrs']['theme'] ) 6081 ) { 6082 $block['attrs']['theme'] = get_stylesheet(); 6083 $has_updated_content = true; 6084 } 6085 } 6086 6087 if ( $has_updated_content ) { 6088 foreach ( $template_blocks as &$block ) { 6089 $new_content .= serialize_block( $block ); 6090 } 6091 6092 return $new_content; 6093 } 6094 6095 return $template_content; 6096 } 6097 6098 /** 6099 * Parses a block template and removes the theme attribute from each template part. 6100 * 6101 * @since 5.9.0 6102 * @deprecated 6.4.0 Use traverse_and_serialize_blocks( parse_blocks( $template_content ), '_remove_theme_attribute_from_template_part_block' ) instead. 6103 * @access private 6104 * 6105 * @param string $template_content Serialized block template content. 6106 * @return string Updated block template content. 6107 */ 6108 function _remove_theme_attribute_in_block_template_content( $template_content ) { 6109 _deprecated_function( 6110 __FUNCTION__, 6111 '6.4.0', 6112 'traverse_and_serialize_blocks( parse_blocks( $template_content ), "_remove_theme_attribute_from_template_part_block" )' 6113 ); 6114 6115 $has_updated_content = false; 6116 $new_content = ''; 6117 $template_blocks = parse_blocks( $template_content ); 6118 6119 $blocks = _flatten_blocks( $template_blocks ); 6120 foreach ( $blocks as $key => $block ) { 6121 if ( 'core/template-part' === $block['blockName'] && isset( $block['attrs']['theme'] ) ) { 6122 unset( $blocks[ $key ]['attrs']['theme'] ); 6123 $has_updated_content = true; 6124 } 6125 } 6126 6127 if ( ! $has_updated_content ) { 6128 return $template_content; 6129 } 6130 6131 foreach ( $template_blocks as $block ) { 6132 $new_content .= serialize_block( $block ); 6133 } 6134 6135 return $new_content; 6136 } 6137 6138 /** 6139 * Prints the skip-link script & styles. 6140 * 6141 * @since 5.8.0 6142 * @access private 6143 * @deprecated 6.4.0 Use wp_enqueue_block_template_skip_link() instead. 6144 * 6145 * @global string $_wp_current_template_content 6146 */ 6147 function the_block_template_skip_link() { 6148 _deprecated_function( __FUNCTION__, '6.4.0', 'wp_enqueue_block_template_skip_link()' ); 6149 6150 global $_wp_current_template_content; 6151 6152 // Early exit if not a block theme. 6153 if ( ! current_theme_supports( 'block-templates' ) ) { 6154 return; 6155 } 6156 6157 // Early exit if not a block template. 6158 if ( ! $_wp_current_template_content ) { 6159 return; 6160 } 6161 ?> 6162 6163 <?php 6164 /** 6165 * Print the skip-link styles. 6166 */ 6167 ?> 6168 <style id="skip-link-styles"> 6169 .skip-link.screen-reader-text { 6170 border: 0; 6171 clip: rect(1px,1px,1px,1px); 6172 clip-path: inset(50%); 6173 height: 1px; 6174 margin: -1px; 6175 overflow: hidden; 6176 padding: 0; 6177 position: absolute !important; 6178 width: 1px; 6179 word-wrap: normal !important; 6180 } 6181 6182 .skip-link.screen-reader-text:focus { 6183 background-color: #eee; 6184 clip: auto !important; 6185 clip-path: none; 6186 color: #444; 6187 display: block; 6188 font-size: 1em; 6189 height: auto; 6190 left: 5px; 6191 line-height: normal; 6192 padding: 15px 23px 14px; 6193 text-decoration: none; 6194 top: 5px; 6195 width: auto; 6196 z-index: 100000; 6197 } 6198 </style> 6199 <?php 6200 /** 6201 * Print the skip-link script. 6202 */ 6203 ?> 6204 <script> 6205 ( function() { 6206 var skipLinkTarget = document.querySelector( 'main' ), 6207 sibling, 6208 skipLinkTargetID, 6209 skipLink; 6210 6211 // Early exit if a skip-link target can't be located. 6212 if ( ! skipLinkTarget ) { 6213 return; 6214 } 6215 6216 /* 6217 * Get the site wrapper. 6218 * The skip-link will be injected in the beginning of it. 6219 */ 6220 sibling = document.querySelector( '.wp-site-blocks' ); 6221 6222 // Early exit if the root element was not found. 6223 if ( ! sibling ) { 6224 return; 6225 } 6226 6227 // Get the skip-link target's ID, and generate one if it doesn't exist. 6228 skipLinkTargetID = skipLinkTarget.id; 6229 if ( ! skipLinkTargetID ) { 6230 skipLinkTargetID = 'wp--skip-link--target'; 6231 skipLinkTarget.id = skipLinkTargetID; 6232 } 6233 6234 // Create the skip link. 6235 skipLink = document.createElement( 'a' ); 6236 skipLink.classList.add( 'skip-link', 'screen-reader-text' ); 6237 skipLink.href = '#' + skipLinkTargetID; 6238 skipLink.innerHTML = '<?php /* translators: Hidden accessibility text. */ esc_html_e( 'Skip to content' ); ?>'; 6239 6240 // Inject the skip link. 6241 sibling.parentElement.insertBefore( skipLink, sibling ); 6242 }() ); 6243 </script> 6244 <?php 6245 } 6246 6247 /** 6248 * Ensure that the view script has the `wp-interactivity` dependency. 6249 * 6250 * @since 6.4.0 6251 * @deprecated 6.5.0 6252 * 6253 * @global WP_Scripts $wp_scripts 6254 */ 6255 function block_core_query_ensure_interactivity_dependency() { 6256 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6257 global $wp_scripts; 6258 if ( 6259 isset( $wp_scripts->registered['wp-block-query-view'] ) && 6260 ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-query-view']->deps, true ) 6261 ) { 6262 $wp_scripts->registered['wp-block-query-view']->deps[] = 'wp-interactivity'; 6263 } 6264 } 6265 6266 /** 6267 * Ensure that the view script has the `wp-interactivity` dependency. 6268 * 6269 * @since 6.4.0 6270 * @deprecated 6.5.0 6271 * 6272 * @global WP_Scripts $wp_scripts 6273 */ 6274 function block_core_file_ensure_interactivity_dependency() { 6275 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6276 global $wp_scripts; 6277 if ( 6278 isset( $wp_scripts->registered['wp-block-file-view'] ) && 6279 ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-file-view']->deps, true ) 6280 ) { 6281 $wp_scripts->registered['wp-block-file-view']->deps[] = 'wp-interactivity'; 6282 } 6283 } 6284 6285 /** 6286 * Ensures that the view script has the `wp-interactivity` dependency. 6287 * 6288 * @since 6.4.0 6289 * @deprecated 6.5.0 6290 * 6291 * @global WP_Scripts $wp_scripts 6292 */ 6293 function block_core_image_ensure_interactivity_dependency() { 6294 _deprecated_function( __FUNCTION__, '6.5.0', 'wp_register_script_module' ); 6295 global $wp_scripts; 6296 if ( 6297 isset( $wp_scripts->registered['wp-block-image-view'] ) && 6298 ! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-image-view']->deps, true ) 6299 ) { 6300 $wp_scripts->registered['wp-block-image-view']->deps[] = 'wp-interactivity'; 6301 } 6302 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Mon Mar 18 08:20:01 2024 | Cross-referenced by PHPXref |